问题描述
- c++中如何将子线程的参数传回主线程 1C
- DWORD WINAPI threadFunction(LPVOID pArg) //返回值进程id(dword类型) 参数类型 LPVOID
{
tNum myNum = *((tNum *)pArg); //将参数转化成int型
EnterCriticalSection(&gCS); // 进入临界区myNum.string_back = FuzzyHash(myNum.string_in);
LeaveCriticalSection(&gCS); // 离开临界区
cout << endl;
return 0;
}
不通过全局变量的方法,将子线程中的参数myNum.string_back传回主线程中,并将其赋值给主函数中的某个变量。
解决方案
利用传递过来的指针,可以带回参数。需要在tNum结构里增加一个变量,比如:back; pArg->back=myNum.string_back
解决方案二:
利用Windows消息机制,向主线程发送消息,把值写在MSG中,在主线程回调函数中处理
解决方案三:
你申请了一个tNum的本地变量对传递过来的指针解引用了,所以你的赋值才会没有传会主线程
解决方案四:
char* p = new char[string_back.length];
PosstMessage(MAIN_HWND WM_USER+10086 pNULL);
在你的主线程消息循环里面添加接收WM_USER+10086的接收函数,WPARAM就是你要的string_back的值,然后复制完后delete wparam
解决方案五:
C++不是可以可以用引用的吗
解决方案六:
LeaveCriticalSection(&gCS); // 离开临界区
改为DeleteCriticalSection(&gCS); // 离开临界区
时间: 2024-10-30 10:36:39