Zastanawiam się, czy jest możliwe (a jeśli tak, jak), aby uzyskać wartość zwracaną wątku w C++ (Windows). Mam kilka wątków i używam na nich WaitForMultipleObjects(...)
. To czeka, aż wątek zostanie ukończony, i zwróci indeks wymienionego wątku, a wszystko będzie dobrze. Chcę jednak móc uzyskać wartość zwracaną wątku, który zakończył korzystanie z jego uchwytu.Jak uzyskać wartość zwracaną wątku systemu Windows?
Na przykład:
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?
}
...
}
Próbowałem użyć GetExitCodeThread(thread)
ale jestem przy założeniu, to zwraca kod wyjścia systemu, jak to zawsze daje mi bardzo dziwne całkowitą. Czy ktoś zna sposób lub obejście?
Zawsze używałem GetExitCodeThread. Czy na pewno używasz go poprawnie? Pobiera uchwyt wątku i wskaźnik do DWORD i zwraca sukces GetExitCodeThread (_nie_ zwraca wartość wątku). –
Twoje pytanie jest moją odpowiedzią :) – Koying