由于多线程的特点,无法像在单线程里一样使用单步跟踪和断点调试,在多线程或者窗口函数中可以使用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;
p = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Func1, &a, 0, &id);
//WaitForSingleObject(p, INFINITE);
return 0;
}
后来查明具体原因为:主线程运行太快,导致程序在Func1线程打印语句之前就已经退出了。更正方法为在main中创建线程Func1后添加同步机制WaitForSingleObject(p, INFINITE)。