私のプロジェクトでは、すべてのクラスオブジェクトには、オブジェクト関数が実行される無限サイクル(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))を持ちます。ループには2つの関数があります: 1. wait() - スレッドを5秒間スリープさせます。 2. walk() - 単純にx + 1 これらの2つの関数は、obj_actionを定義することによって終了後に互いに切り替えます。
ここでは、非同期的にmove()関数が実行され、move()関数の後で非同期にwait()関数が実行され、その逆の場合にこれを変更します。だから私はスレッドを使用する必要はありません。
私はこのような結果を期待:
//constructing
obj()
{
asynchronous(walk());
}
walk()
{
x++
asynchronous(wait());
}
wait()
{
Sleep(5000);
asynchronous(walk());
}
私はあなたがブースト:: ASIOタイマーで、これを行うことができます聞いたが、私は本当に方法がわかりません。 誰かが私に方法を教えてくれたら、とても感謝しています。ここで
ここで私の最初のソースコードにメモリリークがあったので、私の答えの更新を見てください。ごめんなさい。 – nijansen