VC中cout的一些问题

此问题为看雪上的一位兄弟提出问题如下:

#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

你可能感兴趣的:(VC中cout的一些问题)