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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章