我有一个线程,它从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 .
答案 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个条件变量(不是满的,不是空的)。如果它未满,则轮询可以启动,然后将数据放入队列。如果它不是空的,则处理可以撤消数据并处理它。