2010-05-26 107 views
1

ThreadFunc()在這裏被調用兩次嗎?有時我會注意到一個電話,有時甚至沒有。在Win32中創建線程

#include <windows.h> 
#include <stdio.h> 

DWORD WINAPI ThreadFunc(LPVOID); 

int main() 
{ 
    HANDLE hThread; 
    DWORD threadld; 

    hThread = CreateThread(NULL, 0, ThreadFunc, 0, 0, &threadld); 
    printf("Thread is running\n"); 
} 

DWORD WINAPI ThreadFunc(LPVOID p) 
{ 
    printf("In ThreadFunc\n"); 
    return 0; 
} 

輸出1

Thread is running 
In ThreadFunc 
In ThreadFunc 
Press any key to continue . . . 

輸出2

Thread is running 
In ThreadFunc 
Press any key to continue . . . 

輸出3

Thread is running 
Press any key to continue . . . 
+0

請點擊此鏈接:http://stackoverflow.com/questions/601558/multithreading-reference – lsalamon 2010-05-26 19:28:25

回答

4

爲了調用CRT功能,例如printf,您應該使用_beginthread_beginthreadex而不是CreateThread

無論如何,程序可能會在線程有機會輸出任何內容之前結束。

2

稍微增加一點:在main()中使用WaitForSingleObject來爲你的線程完成一項工作。

0

不,ThreadFunc不應該被調用兩次。無論如何,我相信你的代碼片段是不完整的 - 你能發佈你看到這個問題的完整代碼片段嗎?