关于CreateThread()传递的参数问题。是这样,我在主线程中用CreateThread()新建线程,第四个参数传入了一个我希望处理的数,但是处理完成后发现在主线程中的数字并没有更改,求解,代码如下:void WINAPI ConnThread(int sockClient)
{
sockClient = 30;
cout<<sockClient<<endl;
}
int main(int argc, char* argv[])
{
int a = 10;
CreateThread(0,0,(LPTHREAD_START_ROUTINE)ConnThread,(int *)a,0,0);
Sleep(100);
cout<<a<<endl;
return 0;
}
输出是30,10,并不是我期望的30,30
关键是为什么,第四个参数明明传入的是地址,但是在线程函数中可以却用普通变量类型接受,让我感觉就好像是int a = (int *)10;
{
sockClient = 30;
cout<<sockClient<<endl;
}
int main(int argc, char* argv[])
{
int a = 10;
CreateThread(0,0,(LPTHREAD_START_ROUTINE)ConnThread,(int *)a,0,0);
Sleep(100);
cout<<a<<endl;
return 0;
}
输出是30,10,并不是我期望的30,30
关键是为什么,第四个参数明明传入的是地址,但是在线程函数中可以却用普通变量类型接受,让我感觉就好像是int a = (int *)10;
void WINAPI ConnThread(LPVOID sockClient)
{
int* i = (int*)sockClient;
*i = 30;
cout<<sockClient<<endl;
}
(int*)&a这样才是a的地址
{
int *isockClient = (int*)sockClient;
.....
}
#include <iostream>
#include <Windows.h>
using namespace std;
DWORD WINAPI ConnThread(PVOID sockClient)
{
int * temp = (int *)sockClient;
*temp = 30;
cout<<*temp<<endl;
return 0;
}int main(int argc, char* argv[])
{
int a = 10;
CreateThread(0,0,(LPTHREAD_START_ROUTINE)ConnThread1,(PVOID)&a,0,0);
Sleep(100);
cout<<a<<endl;
return 0;
}
(int*)&a这样才是a的地址
{
*sockClient = 30;
cout<<*sockClient<<endl;
}int a = 10;
int main(int argc, char* argv[])
{
CreateThread(0,0,(LPTHREAD_START_ROUTINE)ConnThread,(int *)&a,0,0);
Sleep(100);
cout<<a<<endl;
return 0;
}