在我的項目中,每個類對象都有自己的線程,其中有無限循環(while(1)),其中執行了特定的對象函數。我試圖改變這一點,以便每個對象都可以與定時器異步執行其功能。從boost :: threads到boost :: asio定時器
基本上這是它如何與線程與無限循環的工作原理:
class obj
{
public:
obj();
~obj();
//custom functions and variables
int x;
int obj_action;
move();
wait();
}
obj()
{
obj_action=1;
//when constructing object, make its thread with infinite while cycle
boost::thread make_thread(boost::bind(&obj::obj_engine,this));
}
void obj::obj_engine()
{
while(true)
{
if (obj_action==1){move();}
else if (obj_action==2){wait();}
Sleep(1);
}
}
void obj::move()
{
x++;
obj_action==2;
}
void obj::wait()
{
Sleep(5000);
obj_action==1;
}
這個例子顯示,obj的類,它有構造函數,析構函數,幾個變量和幾個功能。 當構造一個對象(obj())時,會創建線程。線程包含一個函數「obj_engine」,它具有無限循環(while(true))。在循環中有兩個函數: 1. wait() - 使線程休眠5秒鐘。 2. walk() - 只需x + 1 這兩個函數在結束後通過定義obj_action相互切換。
現在我想改變它,當執行構造和對象,執行異步move()函數時,以及move()函數之後,會執行異步wait()函數,反之亦然。所以我不需要使用任何線程。
我希望結果是這樣的:
//constructing
obj()
{
asynchronous(walk());
}
walk()
{
x++
asynchronous(wait());
}
wait()
{
Sleep(5000);
asynchronous(walk());
}
我聽說你能做到這一點,用升壓:: ASIO計時器,但我真的不知道怎麼辦。 如果有人會告訴我如何,我將非常感激。
請看我的答案的更新,因爲在我現在修復的初始源代碼中存在內存泄漏。抱歉。 – nijansen 2012-03-17 10:35:53