由于多線程的特點,無法像在單線程里一樣使用單步跟蹤和斷點調試,在多線程或者窗口函數中可以使用MessageBox來調試,該函數定義為:
MessageBox(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);
其中:
HWND是窗口句柄,可以為NULL;
lpText是文本內容;
lpCaption是窗口標題;
uType是窗口類型,如MB_OK、MB_OKCANCEL、MB_YESNO、MB_YESNOCANCEL;
返回值是IDCANCEL、IDNO、IDOK、IDYES。
注意:LPCSTR和LPCWSTR在VC6.0中可以是char型的字符串,但是在VC2005下要改為char_t型的字符串,也就是使用_T(“……”)的機制。

筆者在進行實驗的時候,讓線程cout輸出或者messagebox輸出,沒有顯示結果,代碼如下:

DWORD WINAPI Func1(LPVOID param)
{
cout 
<< "test" << endl;
MessageBox(NULL, 
"test""ddd", MB_OK);

return 0;
}


int main()
{
HANDLE p;
DWORD a 
= 10;
DWORD id 
= 0;

= CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Func1, &a, 0&id);
//WaitForSingleObject(p, INFINITE);

return 0;
}

后來查明具體原因為:主線程運行太快,導致程序在Func1線程打印語句之前就已經退出了。更正方法為在main中創建線程Func1后添加同步機制WaitForSingleObject(p, INFINITE)。