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, p,NULL);
在你的主线程消息循环里面添加接收WM_USER+10086的接收函数,WPARAM就是你要的string_back的值,然后复制完后delete wparam
C++不是可以可以用引用的吗
LeaveCriticalSection(&gCS); // 离开临界区
改为DeleteCriticalSection(&gCS); // 离开临界区