//线程函数,把参数作为指向整数的指针,并显示其内容。
UINT ThreadFunc(LPVOID xx)
{
int *p;
p=(int*)xx;
CString yy;
yy.Format("Number is %d",*p);
::MessageBox(0,yy,"提示",0);
return 0;
}
//启动线程函数,并把线程序号i的地址传给线程函数。
void CAaaaDlg::OnButton1() 
{
for(int i=0;i<5;i++)
_pThread[i]=AfxBeginThread(ThreadFunc,
&i,THREAD_PRIORITY_NORMAL,0,0,NULL);
}//=========================================================
运行结果:弹出5个提示窗口,依次显示1、2、3、4、和一个不确定数。
         而我期望的结果是显示0、1、2、3、4。
请教问题所在?

解决方案 »

  1.   

    我想原因如下。
      1.2.3.4.是因为onbutton1还没有退出。i的地址有效。到最后一个时。i就出了它的生存期了。i的值也不再有效。但是地址传过去了。地址中的数据是个不定数。所以你显示的也是不定的数了。
      

  2.   

    应该每次创建县城的时候new一个指针,然后1,2,3,4,5的值付给他,这个指针需要在子县城中进行释放。
    这个是县城传递参数的基本方法。
      

  3.   

    哈哈,果然是呀,用new 在内存中启用一段新的空间来存放i 的址,这样即使是 i 的生存期已过,但它的值已经在内存中得到了一份拷贝,这样子线程就可以正确的打印出i 的值了。