void Func()
  {
     for(int i=1;i<=5;i++)
     {
        int buff=i;
        CreateThread(NULL,0,Thread,(LPVOID)&buff,0,&ThreadId);
     }
  }请问 这段有什么问题没?(所用变量都以声明) 是不是 声明了 5个int 型的变量?还是每次循环 buff的值都被覆盖?在就是每次启动线程 传进去的参数 分别 是 1,2,3,4,5吗?

解决方案 »

  1.   

    (LPVOID)&buff
    buff是返回的值,每次都会被改变
      

  2.   

    声明了5个int。如果前面加上static则是每次循环都覆盖前一次的值。
    传进去的参数分别是1,2,3,4,5。
      

  3.   

    你要想传进去的是1, 2, 3, 4, 5,不要取指针,直接(LPVOID)buff
      

  4.   

    for(int i=1;i<=5;i++)
         {
            int buff=i;
            CreateThread(NULL,0,Thread,(LPVOID)&buff,0,&ThreadId);
         }上面的代码有潜在的问题.因为buff的生存周期是在一个循环内,而你的线程内如果要使用buff值的话,必须假设线程在上面一次循环退出前将buff值还原.
    然而操作系统的时间片是以线程为单位的,线程的执行顺序具有不确定性,上面的代码完全有可能在i=5执行完后,第一个创建的线程才开始工作,而此时第一个线程所传入的buff已经没有意义.