进一步的猜测:
即使不为MessageBox()指定属主窗口,是否也会造成调用MessageBox()的线程对
当前窗口SendMessage()某些消息,比如,可能SendMessage()一个WM_KILLFOCUS?
所以我在建立线程前尝试使主窗口最小化(就不是当前窗口了),代码如下:
IDC_SUSPEND: // 挂起主线程
begin
// 加了这一句: 最小化
SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
// 建立线程前禁用按钮
EnableWindow(hWndCtl, FALSE);
// 虚拟句柄 -> 实句柄
DuplicateHandle(
GetCurrentProcess(), GetCurrentThread(),
GetCurrentProcess(), @hThreadPrimary,
THREAD_SUSPEND_RESUME, FALSE, DUPLICATE_SAME_ACCESS);
// 建立线程并减少计数
CloseHandle(begin
Thread(nil, 0, @ThreadFunc, Pointer(hThreadPrimary), 0, dwThreadID));
end;
我这边暂时没有发现程序再死掉了,欢迎继续讨论..