Roy*_*hti 2 windows winapi multithreading
我一直在使用我在以下帖子中找到的代码:
如何获取线程状态(例如暂停),内存+ CPU使用率,启动时间,优先级等
我正在检查线程状态,并且有以下枚举描述了线程"等待"状态的原因 -
enum KWAIT_REASON
{
Executive,
FreePage,
PageIn,
PoolAllocation,
DelayExecution,
Suspended,
UserRequest,
WrExecutive,
WrFreePage,
WrPageIn,
WrPoolAllocation,
WrDelayExecution,
WrSuspended,
WrUserRequest,
WrEventPair,
WrQueue,
WrLpcReceive,
WrLpcReply,
WrVirtualMemory,
WrPageOut,
WrRendezvous,
Spare2,
Spare3,
Spare4,
Spare5,
Spare6,
WrKernel,
MaximumWaitReason
};
Run Code Online (Sandbox Code Playgroud)
谁能解释一下什么WrQueue是,也许有什么差别WrUserRequest和UserRequest是?
使用NtQuerySystemInformation()with 获取信息SystemProcessInformation.
WrQueue这是线程在内核中等待KQUEUE对象(在其中查找定义wdm.h)的时候.这可以是调用ZwRemoveIoCompletion或Win32 shell GetQueuedCompletionStatus(IOCP就是KQUEUE对象).或者线程(从vista开始)调用ZwWaitForWorkViaWorkerFactory(工厂工厂内部使用KQUEUE.也可能在内核调用中使用该线程KeRemoveQueue- 这通常是系统工作线程.
WrUserRequest由win32k.sys子系统使用.通常这是线程调用时GetMessage.因此,如果我们查看,WrUserRequest我们可以确定该线程正在等待窗口消息.
UserRequest-这意味着一些对象[S]在该线程等待经由WaitForSingleObject[Ex]或WaitForMultipleObjects[Ex]或MsgWaitForMultipleObjects[Ex](或它当量)
| 归档时间: |
|
| 查看次数: |
2908 次 |
| 最近记录: |