请教:postmessage(wm_close)为什么关不掉窗口?有什么别的方法?强制的,如kill这样的?怎么用呢?求代码。

huhaha7171 2005-02-24 02:34:47
A是我写的程序,用createprocess来调用别人的程序B(一个压力测试程序)并得到相应的结构si,pi。
B的窗口标题是固定的,所以我可以得到B的窗口句柄。(用findwind)

在A里有一定时器,每隔一分钟向B发送WM_CLOSE消息,可是怎么也关不掉。
但是能在日志文件里找到每分钟的关闭记录,说明程序已向B的窗口每隔一分钟就发送了关闭的消息。
另外,B程序运行时CPU占用率一直在100%左右。
(难道postmessage此时起不到作用了?)

以下是计时器void CMTESTDlg::OnTimer(UINT nIDEvent)函数里的一段代码:

CWnd * hMtaWindow = NULL;
hMtaWindow = FindWindow(NULL,_T("WinA OEM V3.2"));

if(hMtaWindow!=NULL)
{
hMtaWindow->PostMessage(WM_CLOSE, 0, 0);
//加入日志监控
if((stream=fopen("timelog.txt", "a")) == NULL)
{
AfxMessageBox("The file 'timelog.txt' was not opened");
return;
}
else
fprintf(stream,
"force to close the window! message:%d, testtime:%d\n",
nIDEvent,
TESTTIME);

if(fclose(stream))
{
AfxMessageBox("The file 'timelog.txt' was not closed");
return;
}
}
else
{
KillTimer(2);
}
...全文
523 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tankbattle 2005-02-25
  • 打赏
  • 举报
回复
TO huhaha
1.是的
2.最好察看一下b进程是不是进了死循环,是的话靠发消息给它让它退出是不可能的,因为他没法抽空去GetMessage。只能用TerminateProcess了。
horris 2005-02-25
  • 打赏
  • 举报
回复
PostMessage(WM_QUIT,...)
huhaha7171 2005-02-24
  • 打赏
  • 举报
回复
继续问一下:

1、BOOL TerminateProcess( HANDLE hProcess, UINT uExitCode);中的hProcess是不是
A在createprocess B时,参数pi里的(hProcess HANDLE ; handle to the child process)?

2、void PostQuitMessage( int nExitCode);怎么用呀?难道不需要B的一些信息吗?




sinall 2005-02-24
  • 打赏
  • 举报
回复
1、谁知道B的WM_CLOSE怎么处理的?
2、PostMessage可能会丢失
3、试试PostQuitMessage
4、如若不行,只好TerminateProcess
spwnihao 2005-02-24
  • 打赏
  • 举报
回复
PostQuitMessage or TerminateProcess

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧