MFC用AfxBeginThread创建的线程,如何获取线程函数返回值.

2025-04-26 15:38:18
推荐回答(4个)
回答1:

#include
#include
#include
using namespace std;

DWORD WINAPI ThreadPro(LPVOID lpParamter);
BOOL bRunning = TRUE;
int main()
{
HANDLE hThread = CreateThread(NULL,0,ThreadPro,0,0,NULL);

DWORD dwExitCode;
GetExitCodeThread(hThread,&dwExitCode);
printf("0x%08X\n",dwExitCode);
system("pause");
bRunning = FALSE;
system("pause");
GetExitCodeThread(hThread,&dwExitCode);
printf("0x%08X\n",dwExitCode);
system("pause");
CloseHandle(hThread);
return 0;
}

DWORD WINAPI ThreadPro(LPVOID lpParamter)
{

while(bRunning)
{
Sleep(1000);
}
return 4L;
}

这个代码给你参考,线程的创建和销毁过程还是很复杂的,想要深入一点了解的话,再问我吧!

回答2:

查询MFC,SuspendThread()

CSDN上谈到
“直接SuspendThread函数不能保证在何处挂起,可能有线程未退出临界区导致死锁,不太安全。
创建一个Event,需要挂起线程时,WaitForSingleObject等待,继续的时候,SetEvent ”
这个方法更安全。

回答3:

建一个全局变量保存返回值就行了,比如返回值为整型:
int nRtn;
UINT MyThread(LPVOID lpParam)
{
nRtn = function();
return nRtn;
}

int main()
{
AfxBeginThread(MyThread,null);
Sleep(nTime);//等待线程运行结束后对nRtn操作
...

}

回答4:

反回是一个CWinTheadd类的指针 。。。你可以保留这个指针。。用来对线程进行操作。。如挂起。。启动。。。