+ -
当前位置:首页 → 问答吧 → 进程挂起后,为何还能处理刷新消息?

进程挂起后,为何还能处理刷新消息?

时间:2011-11-21

来源:互联网

《Windows核心编程》(第四版)7.2章中有一个进程挂起的例子,大致步骤是这样的:
如果要挂起进程A,获取进程A的ID,然后调用CreateToolHelp32Snapshot获得这个进程的快照,然后用Thread32First和Thread32Next来遍历这个进程中的所有线程。再用OpenThread来打开线程,最后用SuspendThread来把这个进程的所有线程都挂起。
在实验《Windows核心编程》(第四版)7.2中的 进程的挂起和唤醒 章节中的实验的时候,我挂起了一个进程A,但是我发现,尽管进程A不能处理WM_TIMER之类的消息,但是还能处理WM_PAINT之类的消息。按照我的理解,把这个进程挂起来之后,系统应该不会再分给这个进程时间片,也就是说,这个进程不能处理任何消息,那为什么还能处理WM_PAINT消息呢?

作者: tanxiqiao   发布时间: 2011-11-21

进程挂起的话,只是一个瞬间将该进程的所有线程挂起
如果在你去的快照后的瞬间,又启动线程,在新启动的线程则不会挂起
你的情况应该不存在这个可能,可能在你挂起线程的时候,把挂起操作的线程先挂起了,导致部分线程没有挂起

作者: sky101010ws   发布时间: 2011-11-22

A程序只有一个线程,没有启动新的线程。

作者: tanxiqiao   发布时间: 2011-11-22

各位大牛回答一下。

作者: tanxiqiao   发布时间: 2011-11-24

哎,没人回答吗?只有问译者了。

作者: tanxiqiao   发布时间: 2011-11-30

你挂起的仅是用户线程,而对于界面刷新、WM_CLOSE等等,属于该进程内部消息处理机制,并不是线程处理的,所以无法挂起,一定会响应的

作者: mfc168   发布时间: 2011-11-30

这个问题好象比较高难

作者: Kaile   发布时间: 2011-11-30

引用 5 楼 mfc168 的回复:

你挂起的仅是用户线程,而对于界面刷新、WM_CLOSE等等,属于该进程内部消息处理机制,并不是线程处理的,所以无法挂起,一定会响应的

能不能详细解释一下,我感觉都是在一个线程里面处理的,进程内部的消息处理机制不也是在线程里处理的吗?

作者: tanxiqiao   发布时间: 2011-11-30

热门下载

更多