此问题为看雪上的一位兄弟提出问题如下:
#include<iostream.h>
#include<windows.h>
DWORD WINAPI ThreadFun(LPVOID arg);
DWORD i=0;
void main()
{
HANDLE thread;
DWORD threadid;
thread=CreateThread(0,0,ThreadFun,&i,0,&threadid);
cout<<"main thread"<<i++<<endl;
Sleep(1000);
CloseHandle(thread);
}
DWORD WINAPI ThreadFun(LPVOID arg)
{
cout<<"my thread"<<i++<<endl;
return 0;
}
这个程序输出的两个结果是
1.
my thread0
my thread0
main thread
Press any key to continue
2.
main thread
main thread
my thread0
Press any key to continue
请问1中my thread0出现两次是怎么造成的。
个人总结:
一开始我以为是线程的问题造成的,经过北极星的提醒,可能的原因如下:
可能缓冲中有一个标记,就是是否已经被输出而这个程序是多线程,因为是在控制台,不排除他们使用的是同一个缓冲区当新线程执行的时候,本来main中刚好输出完,但没有及时清空缓冲,标记也没变成已输出,然后由于时间片的轮转, 那么新线程的cout会将main中的缓冲再次的输出一次并清理 看雪的帖子路径为:http://bbs.pediy.com/showthread.php?t=67776