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