#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;
DWORD WINAPI threadFunc(LPVOID pParam);
int _tmain(int argc, _TCHAR* argv[])
{
int i = 0;
while (TRUE)
{
i++;
CreateThread(NULL,0,threadFunc,&i,0,NULL);
Sleep(10000);
}
}
DWORD WINAPI threadFunc(LPVOID pParam)
{
int* i = (int *)pParam;
while (TRUE)
{
cout<<*i<<endl;
Sleep(1000);
}
return 0;
}
只输出新创建的线程了以前的线程好像被覆盖了一样,为什么无法输出以前创建的线程内容了呢?
但是我看任务管理器里面线程并没有减少 为何?

解决方案 »

  1.   

    都输出了吧,i是共享的,各个线程都一样,改一下
    DWORD WINAPI threadFunc(LPVOID pParam)
    {
        int* i = (int *)pParam;
        while (TRUE)
        {
            cout<< "thread_id:" << GetCurrentThreadId() << " i:" << *i<<endl;
            Sleep(1000);
        }
        return 0;
    }
      

  2.   

    或者:
    DWORD WINAPI threadFunc(LPVOID pParam)
    {
      int i = *(int *)pParam;
      while (TRUE)
      {
      cout<< i <<endl;
      Sleep(1000);
      }
      return 0;
    }
      

  3.   

    按照楼主的程序执行的结果是,线程每秒输出主线程中i的值,每10秒创建一个这样的线程,这样会导致一个结果,就是,10秒后,主线程再创建一个新的线程,20秒后再创建一个
    若主函数是这样写:
    int _tmain(int argc, _TCHAR* argv[])
    {
        int i = 0;
        while (TRUE)
        {
            i++;
    if (1 == i)
    {
    CreateThread(NULL,0,threadFunc,&i,0,NULL);
    }
            Sleep(10000);
        }
    return 0;
    }
    就能避免多次创建线程,不知道是否符合楼主的问题
      

  4.   

    你传进去的是i的指针啊,如果i变化了,各个线程中i的值都会一起变化的啊