如何获得Windows线程的返回值?

Sef*_*efu 7 c++ windows winapi multithreading return-value

我只是想知道是否有可能(如果是这样,如何)在C++(Windows)中获取线程的返回值.我有几个线程,我使用WaitForMultipleObjects(...)它们.这等待一个线程完成,并返回所述线程的索引,一切都很好.但是,我希望能够获得使用其句柄完成的线程的返回值.

例如:

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?
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我试图使用,GetExitCodeThread(thread)但我假设这返回一个系统退出代码,因为它总是给我一个非常奇怪的整数.有没有人知道方法或解决方法?

Don*_*eba 11

GetExitCodeThread是正确的函数.以下是MSDN对其功能的描述:

此函数立即返回.如果指定的线程尚未终止且函数成功,则返回的状态为STILL_ACTIVE.如果线程已终止且函数成功,则返回的状态为以下值之一:

  • ExitThread或TerminateThread函数中指定的退出值.
  • 线程函数的返回值.
  • 线程进程的退出值.

  • `GetExitCodeThread(t1,&retVal)`并返回4294967295(retVal是一个DWORD).线程中的实际返回值为-1.我只是想通了一些反转为负面的投资.叹... (2认同)