C++(Windows)でスレッドの戻り値を取得することが可能かどうか(もしそうであれば)どうすればいいでしょうか。私はいくつかのスレッドを持っており、それらにWaitForMultipleObjects(...)
を使用しています。これは、スレッドが完了するまで待機し、前記スレッドのインデックスを返し、すべてがうまくいきます。しかし、ハンドルを使用して終了したスレッドの戻り値を取得できるようにしたい。例えばWindowsスレッドの戻り値を取得するにはどうすればよいですか?
:
DWORD WINAPI Thread1(void *parameter){
...
if(...) return 0;
else return -1;
}
DWORD WINAPI Thread2(void *parameter){
...
if(...) return 1;
else return 0;
}
int main(){
HANDLE t1 = CreateThread(0, 0, Thread1, NULL, 0, 0);
HANDLE t2 = CreateThread(0, 0, Thread2, NULL, 0, 0);
HANDLE *threads = new HANDLE[2];
threads[0] = t1;
threads[1] = t2;
int result = WaitForMultipleObjects(2, threads, false, INFINITE);
if(result == 0){
//get the threads value here:
int retVal = SomeFunction(t1); //What is SomeFunction?
}
...
}
私はGetExitCodeThread(thread)
を使用しようとしましたが、それはいつも私に非常に奇妙な整数を与えるように私は、これはシステムの終了コードを返すと仮定しています。誰か方法、または回避策を知っていますか?
私は常にGetExitCodeThreadを使用しています。正しく使用していますか?これは、スレッドハンドルとDWORDへのポインタをとり、GetExitCodeThreadの成功を返します(_not_はスレッドの戻り値ではありません)。 –
あなたの質問は私の答えです。 – Koying