特定のトリガーイベントがクラスFooの内部で受信されたときスレッドを生成する必要があります。トリガーイベントは、変数triggerEvent
への参照を持つWinsockサーバークラスによって受信されます。オブジェクト指向のイベント駆動型アプリケーションでのスレッド
bool Foo::HandleEvents()
{
while (1)
{
// Other things are done at the top of this loop
switch (triggerEvent)
{
case 'h':
{
// I instantiate an object here to do
// what I need to do in the thread.
// I use a pointer that is a private
// member of Foo.
thingMaker = new ThingMaker(params);
// Spawn a new thread here calling a
// function of ThingMaker and using thingMaker
break;
}
case ...: return true;
default: break;
}
}
}
スレッドがswitch
でその場合にローカルであるので、私はbreak
にそれへのアクセスを失います。私はjoin()
に電話することはできません。なぜなら、私はリアルタイム処理を扱っており、すでに完了していない限り、スレッドが終了するのを待つことができないからです。
最近、私は同じアプリケーションに関してhereスレッディングに関する質問をしましたが、detach()
は悪い習慣であると言われました。私の質問はあまりにも漠然としていると思います。私のニーズに合っていないソリューションが提供されてしまったので、私のアプリケーションはその後アーキテクチャが変わっています。
私はまた、ThingMakerのインスタンスを作成する無駄なマネージャークラスのスレッドをカプセル化しようとしました。
どうすればよいですか?私の主な問題は範囲だと思うが、私の選択肢は限られている。 Foo::HandleEvents()
をまったく遅らせることはできません。そうしないと、重要なデータが失われます。
投稿されたコードが、あなたの 'params'をディスパッチする作業のためにプールによって監視されるキューにポストするスレッドプールのような、スレッドのライフタイムを制御するシステムを考えましたか? – WhozCraig
'futures'を扱うのはどうですか? C++ 11はありますか? – Arunmu
'スレッド'を 'Foo'クラスのメンバにして、なぜあなたはいつもそのスレッドにアクセスできますか?私が持っている質問は、 'HandleEvent'関数がトリガされたときにスレッドがまだ実行中であれば、何をしたいのですか?すべての未解決のスレッドを追跡するためにデータメンバが必要な場合があります。 –