#include "windows.h"
#include "stdio.h"DWORD WINAPI fun1(
       LPVOID lpParameter
);int main(int argc, char* argv[])
{
HANDLE hTread = CreateThread(NULL,0,fun1,NULL,0,NULL);

printf("Main fun run!\n");
int y=0;
for(int x=0;x<1000000;x++)
        y++;
return 0;
}DWORD WINAPI fun1(
              LPVOID lpParameter
)
{
//int i=100;
while(true)
       printf("fun1 run\n");
return 0;
}运行结果有时候是先两个Main fun run!,再多个fun1 run,有时候是一个Main fun run!,在多个fun1 run,解释下怎么会首先出现两个Main fun run

解决方案 »

  1.   

    出现两个Main fun run!应该是不可能,线程是抢占式的,如果在main执行完之前线程抢到了CPU片,那么就会出
    fun1 run,如果没抢到,main就退出去了,程序都关了,当然线程也就强行退出去了, 
    main中的for并不能释放main所抢的CPU片,可能要等main执行完了,线程才能抢到CPU片,而此时main已经退出
      

  2.   

    你选择的run-time library不对,应该做如下设置:project settings->Use run-time library->Debug Multithreaded
      

  3.   

    "Main fun run!"应该只有一个。
    可能是某次新线程先抢到了时间片(在printf("Main fun run!\n");之前),主线程printf后退出。
    接下来的一次是主线程先抢到了时间片,先printf,再由新线程printf,最后由主线程退出。
    所以看上去恰好两个"Main fun run!"在一起。
    你没有采取线程同步的措施,应该会出现这样的情况。