由于多线程的特点,无法像在单线程里一样使用单步跟踪和断点调试,在多线程或者窗口函数中可以使用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)。