由于多線(xiàn)程的特點(diǎn),無(wú)法像在單線(xiàn)程里一樣使用單步跟蹤和斷點(diǎn)調(diào)試,在多線(xiàn)程或者窗口函數(shù)中可以使用MessageBox來(lái)調(diào)試,該函數(shù)定義為:
MessageBox(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);
其中:
HWND是窗口句柄,可以為NULL;
lpText是文本內(nèi)容;
lpCaption是窗口標(biāo)題;
uType是窗口類(lèi)型,如MB_OK、MB_OKCANCEL、MB_YESNO、MB_YESNOCANCEL;
返回值是IDCANCEL、IDNO、IDOK、IDYES。
注意:LPCSTR和LPCWSTR在VC6.0中可以是char型的字符串,但是在VC2005下要改為char_t型的字符串,也就是使用_T(“……”)的機(jī)制。
筆者在進(jìn)行實(shí)驗(yàn)的時(shí)候,讓線(xiàn)程cout輸出或者messagebox輸出,沒(méi)有顯示結(jié)果,代碼如下:
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;

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

return 0;
}
后來(lái)查明具體原因?yàn)椋褐骶€(xiàn)程運(yùn)行太快,導(dǎo)致程序在Func1線(xiàn)程打印語(yǔ)句之前就已經(jīng)退出了。更正方法為在main中創(chuàng)建線(xiàn)程Func1后添加同步機(jī)制WaitForSingleObject(p, INFINITE)。