关于线程的怪异现象
随便写个程序想看看线程的运作方式的,遇到一个怪异的现象。
先看源代码
#include "stdafx.h "
#include <iostream.h>
DWORD WINAPI MyThread(LPVOID n);
int main(int argc, char* argv[])
{
HANDLE hThread[4];
int i;
for(i=0;i <4;i++)
{
hThread[i]=CreateThread(NULL,0,MyThread,(LPVOID)i,NULL,NULL);
}
WaitForSingleObject(hThread[0],INFINITE);
cout < < "Wake Up! " < <endl;
return 0;
}
DWORD WINAPI MyThread(LPVOID n)
{
int num=(int)n;
int count=0;
cout < < "Thread " < <num < < " Launched! " < <endl;
while(1)
{
count++;
if(count> 5)
{
cout < < "Thread " < <num < < " Out! " < <endl;
return 0;
}
Sleep(1000);
}
return 0;
}
结果是,每个Thread都Out了3次,太奇怪了,一个现成明明退出了,怎么会反复把
cout < < "Thread " < <num < < " Out! " < <endl;执行三遍呢?
[解决办法]
不应该出现这样的情况.我运行了没有出现你说的情况.只能是有的线程没来得急执行完就随主线程的退出而推出了.应该不会出现你说的情况.别人有什么高见?