在线程内部函数上使用哪种保护方法(mutex,readwritelock ..)

时间:2012-02-01 07:55:56

标签: c++ qt qthread

我有一个线程,它从Web服务轮询数据,然后将其发送到不同的类来处理数据。该数据的过程可能需要很长时间,有时甚至超过调用线程内轮询函数的定时器间隔 我想保护这个轮询功能,即在处理数据的过程中,不要进入该功能。

我的流程是这样的

workerThread -> start timer -> that invoking the polling method ->
the polling method gets the data and send it to processing  > mean while this polling function can be called again .

2 个答案:

答案 0 :(得分:1)

如果您的轮询函数执行时间比轮询计时器要长,而不是在函数实现中,您可以尝试锁定互斥锁

void pollingFunction() {

    bool isLocked = mutex.tryLock(3000); //timeout if you want
    if(isLocked) 
    {
       //process the data
    }
    else 
    {
      return;
    }

    mutex.unlock();
} 

答案 1 :(得分:0)

我假设你使用至少2个线程。一个是由计时器触发,另一个是处理轮询数据。所以Monitor Object模式适用于它,你需要为轮询数据定义一个队列并定义2个条件变量(不是满的,不是空的)。如果它未满,则轮询可以启动,然后将数据放入队列。如果它不是空的,则处理可以撤消数据并处理它。