2011-02-07 5 views
0

私はビデオゲームを作っています。グラフィックスを扱うメインスレッドと、ネットワーキング(同期UDPソケット)を担当する別のワーカースレッドがあります。スレッド終了の順序、つまりスレッドの依存関係を指定できますか?

問題は、私はゲームを閉じたとき、私は、「アクセス違反」エラーを取得し、デバッガは数行のコードのいずれかに私を指していることである - 私ははすでに得たと信じオブジェクトを参照し、それぞれが他のスレッドで破壊されました。

非同期スレッドを使用しているので、私の本能は、recv()呼び出しがブロックされている間にメインスレッドがほとんど常に最初にkillされ、最後にrecv()が戻るときに、現在保持しているポインタはすべて偽スタジオはエラーを投げ始める。

ところで、私は、共有リソースをクリーンアップする前にブーストスレッド、Visual Studioの2008とC++

答えて

3

を使用している、メインスレッドは完了するために、ネットワーク・スレッドを待つ必要があります。 Boostでは、boost::thread::join()関数がこのトリックを行う必要があります。

boost::thread_interruptedも必ず処理してください。

(N.B.これは一般的な回答のようなものですが、特にBoostスレッドに関する経験はありません)

関連する問題