2012-02-01 49 views
0

我有一個線程輪詢web服務中的數據,然後將它發送到不同的類來處理數據。該數據的處理可能需要很長時間,有時甚至超過調用線程內輪詢函數的計時器間隔。
我想保護這個輪詢功能,即在數據處理過程中,不要輸入該功能。在線程內部函數上使用哪種保護方法(mutex,readwritelock ..)

我的流程是這樣的

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 . 

回答

1

如果你的查詢功能需要更長的時間比高於你的函數實現輪詢定時器來執行,你可以嘗試鎖定互斥

void pollingFunction() { 

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

    mutex.unlock(); 
} 
0

我假設你正在使用至少2個線程。一個是由定時器觸發的,另一個是處理輪詢數據。所以監控對象模式將起作用,您需要爲輪詢數據定義一個隊列並定義2個條件變量(不是滿的,不是空的)。如果未滿,則可以開始輪詢,然後將數據放入隊列。如果它不是空的,則處理可能會重新獲取數據並處理它。

+0

沒有計時器輪詢線程內 – user63898 2012-02-01 10:00:37