【发布时间】:2011-10-29 08:24:17
【问题描述】:
我只是想知道是否有可能(如果有,如何)在 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?
}
...
}
我曾尝试使用GetExitCodeThread(thread),但我假设这会返回一个系统退出代码,因为它总是给我一个非常奇怪的整数。有人知道方法或解决方法吗?
【问题讨论】:
-
我一直使用GetExitCodeThread。你确定你使用正确吗?它接受一个线程句柄和一个指向 DWORD 的指针,并返回 GetExitCodeThread 的成功(不是线程的返回值)。
-
你的问题就是我的答案:)
标签: c++ windows multithreading winapi return-value