2016-07-23 7 views
-1

functionLarge()を呼び出す1スレッドのprogrammがあり、呼び出し元の次のコードラインの前に終了する必要がありますmain機能。関数がうまく分解され、時間がかかると仮定してください。このanswer.wait()
を提案し、よりその優れたのだろうかされていますメイン(1つのスレッド)を続行する前に関数が終了するまで待つ

bool done = false; 
    // returning true at the end, modifies bigObject by refrence 
    done = functionLarge(bigObject); 
    while(!done) { usleep(1000); } 

    //...can now continue 

は戻っboolずに、そこより良いアプローチはありますか?

+0

「bool」の使用をやめ、プログラムを通常の実行順序で実行させますか? – MikeCAT

+0

あなたのアプローチは悪いです。なぜなら、 'dont'の値は割り当てられた後に魔法のように変化しないので、ループは0か無限になります。 – MikeCAT

+0

'functionLarge'が完了するまで、あなたはwhileを入力しません。 – Dacav

答えて

1

はすでに動作していますので、これは大変複雑です。

あなたが言ったように、それはシングルスレッドです。コントロールはfunctionLargeに渡され、その関数が完了するまで返されません。

何もする必要はありません。 boolまたはwhileループは必要ありません。単一のスレッドでは、何が「待ち」をしているのでしょうか?

int main() 
{ 
    doThis(); 
    nowDoThis(); 
} 
+0

オブジェクトは 'functionLarge'によって修正され、次の行は[対話型マーカーサーバ](http://docs.ros.org/jade/api/interactive_markers/html/classinteractive__markers_1_1InteractiveMarkerServer.html#a7b688e99eeb8cdcc3f8d03c49ec5ef7​​0)に追加されます。コンストラクタがなければ、私はマーカーを視覚化することができず、追跡しました。オブジェクトは 'functinLarge'によって準備が完了する前に追加されます。また、単純な 'usleep(1000)'が働くので、私はそのタイミングを仮定します。私は[Rviz](http://wiki.ros.org/rviz/Tutorials/Markers%3A%20Basic%20Shapes#Running_the_Code) – ItsmeJulian

+0

の違いを直接視覚化することができます...ああ、私はそれを得たと思う、間違いはさらにup:サーバは動的に割り当てられたオブジェクトであり、私が 'bigObject'を渡すとき、明らかに完全に初期化されていません。 – ItsmeJulian

+0

何を言っているのか分かりません。 –

関連する問題