我有一個運行在線程中的函數f1,並且它不斷地執行一個計算c1。在一個正在運行的線程中處理一個事件
但是當一個特殊事件發生時,f1必須做計算c2(而不是計算c1)。
我該如何執行此操作? 我已經搜索了很多,生產者 - 消費者案例或條件鎖不適合我的實現(我這麼認爲),因爲我不希望線程停止,直到事件發生。
任何人都可以幫我嗎?
預先感謝您
class myclass
{
void f1 (void)
{ //I do not want the f1 stop, it has to do its work, and when f2 send an event to him, act different
while (1) {
if(there is an event from f2)
do c2;
else
do c1;
// I do not want to loose any event either
}
}
void f2(void)
{//f2 runs in parralel to f1
}
void execute()
{
// f1_thread do calculations (c1) continiously
boost::thread* f1_thread = new boost::thread(boost::bind(&myclass::f1, this));
// f2_thread has to send an event to force the f1_thread (once a while) to do calculation c2 instead of c1
boost::thread* f2_thread = new boost::thread(boost::bind(&myclass::f2, this));
}
}
int main()
{
myclass _myclass;
_myclass.execute();
}
我想要的「F1」停止「C1」計算,並立即切換到計算C2每當「F2」給他發個信號(我不知道信號還)。計算c1非常耗時,如果我使用「if子句」,當事件發生時,「c2」直到「c1」結束才能運行。
您能否回答我,而不是僅僅投票-1?我是新來的線程,我想開始使用事件。如果問題很簡單,寫一個答案。謝謝 –
這個*'我不想用'if'的原因是我的計算非常耗時,如果我使用「if」,當f2發生變化時,f1在下一輪之前不會注意到它。 '*完全沒有意義 - 請嘗試更加清楚地解釋。 –
@JohannGerell感謝您的關注,我希望「f1」停止「c1」計算,並在每當「f2」向他發送一個信號(我不知道有關信號)時立即切換到計算c2。計算c1非常耗時,如果我使用「if子句」,當事件發生時,「c2」直到「c1」結束才能運行。希望清楚。謝謝 –