for(i=0;i<1;i++)
{
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)proc,&i,0,&pid);
}void proc(LPVOID pParam)
{
int num=*((int *)pParam);
}num的值好像不是0,奇怪了?
{
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)proc,&i,0,&pid);
}void proc(LPVOID pParam)
{
int num=*((int *)pParam);
}num的值好像不是0,奇怪了?
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)proc,(LPVOID)&i,0,&pid);
这很正常,因为,
for(i=0;i<1;i++)
{
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)proc,&i,0,&pid);
}
起了几个线程,此时,线程有可能还没启动执行,主要是异步的原因。你跟踪的,可能是第二个线程,也就是说,第二个线程比第一个启动的线程先启动。而这种情况是很普遍的。那么,你调试的时候,传进来的参数不一定就是0,有可能是1,或2或3。
void proc(LPVOID pParam)
{
int num=*((int *)pParam);
CString s;
s.Format("%d",num);
::MessageBox(NULL,s,"hummel",NULL);
}
我是直接运行程序。num的值在一个messagebox中显示为1
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)proc,(LPVOID)&0,0,&pid); 这样应该没问题吧. 是不是你循环里还有别的代码.i 改变了
没理由啊??
没有别的代码,你可以试试看,就以上的代码,在非调试环境下运行一下。
{ int a=i;;
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)proc,&a,0,&pid);
}
你这样试试看应该不会变了吧,参数传的I的地址,而你新起的线程运行时I已经成1了,不知道我想的对不对