#include <windows.h>
#include <stdio.h>
#include <Tlhelp32.h>
DWORD WINAPI readproc(LPVOID lparam)
{
//Sleep(1000);
printf("%d\n",(int)lparam);
return 0;
}
int main()
{
THREADENTRY32 te;
te.dwSize=sizeof(te);
DWORD i=0;
int a=0;
HANDLE readhandle[3];
readhandle[i]=CreateThread(0,0,readproc,(LPVOID)i,0,0);
Sleep(1);
//WaitForSingleObject(readhandle[i],INFINITE);
return 0;
}
vc下运行的时候一会儿会出现一个0,一会儿会出现2个0.。。这是系统调度吧??为啥一会儿是1次,一会儿是两次呢?
还有为啥程序一开始会停会儿呢??是因为createthread函数创建线程慢吗??

解决方案 »

  1.   

    在主线程Sleep(1)的时间内,你新的线程可能被调用一次,可能2次
      

  2.   

    一般并不推荐使用 CreateThread函数,而推荐使用RTL 库里的System单元中定义的 BeginThread函数,因为这除了能创建一个线程和一个入口函数以外,还增加了几项保护措施。   
    在MFC程序中,应该调用AfxBeginThread函数,在Visual C++程序中应调用_beginthreadex函数。
      

  3.   

    线程调用顺序是不固定的,windows不是实时的操作系统,楼主想控制顺序得自己加同步
      

  4.   

    HANDLE readhandle[3]; readhandle[i]=CreateThread(0,0,readproc,(LPVOID)i,0,0);
    下面一句应该有for循环吧。主线程不会等待子线程结束。所以打印几个数字是不确定的。在侯捷翻译的《win32多线程程序设计》一书中的47页有以下内容:
    程序启动后就执行的那个线程称为主线程(primary thread)。主线程有
    两个特点。第一,它必须负责GUI(Graphic User Interface)程序中的主消
    息循环。第二,这一线程的结束(不论是因为返回或因为调用了ExitThread( ))
    会使得程序中的所有线程都被强迫结束,程序也因此而结束。其他线程没有机
    会做清理工作。