日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

WMI技术介绍和应用——查询正在运行的线程信息

發布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WMI技术介绍和应用——查询正在运行的线程信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 本文使用了《WMI技術介紹和應用——使用VC編寫一個半同步查詢WMI服務的類》中代碼做為基礎。

? ? ? ? 一般來說,如果試圖枚舉系統中的線程。需要先枚舉系統中的進程,然后再枚舉每個進程中的線程。而WMI給我們提供了一種比較簡便的枚舉線程信息的方法。(轉載請指明出于breaksoftware的csdn博客)

? ? ? ? 如何使用WMI枚舉所有線程的所有信息?

CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT * FROM Win32_Thread" ); 
recvnotify.ExcuteFun();


? ? ? ? 以下我粗略介紹下各個屬性的應用。

? ? ? ? 如何使用WMI枚舉正在運行的線程的占用時間?

CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT ElapsedTime FROM Win32_Thread" );    
recvnotify.ExcuteFun();


? ? ? ? 該時間是以毫秒(Milliseconds)為單位。

? ? ? ? 如何使用WMI枚舉正在運行的線程的句柄

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT Handle FROM Win32_Thread" );recvnotify.ExcuteFun();


? ? ? ? MSDN中說明,該句柄具有所有訪問權限。
? ? ? ? 如何使用WMI枚舉正在運行的線程的內核時間?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT KernelModeTime FROM Win32_Thread" );recvnotify.ExcuteFun();

? ? ? ? 該時間以100納秒為單位。

? ? ? ??如何使用WMI枚舉枚舉正在運行的線程基礎等級?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT PriorityBase FROM Win32_Thread" );recvnotify.ExcuteFun();


? ? ? ? 該值是線程基數等級,可以選0~31之間的值。值越高,代表該線程等級越高。

? ? ? ??如何使用WMI枚舉枚舉正在運行的線程動態等級?

CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT Priority FROM Win32_Thread" );    
recvnotify.ExcuteFun();


? ? ? ??該等級是個動態調整的等級。系統通過該等級決定哪個線程享有CPU資源。除了動態等級,還有個基礎等級概念。線程在初始化階段會將動態等級設置成基礎等級值。然后根據需要提升或者降低動態等級。只有基礎等級在0~15的線程的動態等級才會被調整。而系統并不會提升基礎等級在16~31的線程的動態等級。

? ? ? ? 如何使用WMI枚舉所有正在等待非CPU資源的線程的等待原因?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT ThreadWaitReason FROM Win32_Thread Where ThreadState = 6" );recvnotify.ExcuteFun();

? ? ? ? 此處要說明兩個字段的含義。TreadWaitReason字段代表線程等待的原因,而該字段只有在ThreadState為6時有效。ThreadState為6時代表該線程在等待非CPU資源。我們看下ThreadState的值說明

ValueMeaning
0Initialized — It is recognized by the microkernel.
1Ready — 該線程已經做好準備運行,等待下一個CPU資源。
2Running — 該線程正在運行。
3Standby — 該線程正準備運行。在一個時刻只有一個線程可以處于這種狀態。
4Terminated — 該線程已經完成執行
5Waiting — 該線程還沒做好運行的準備。當它處于Ready狀態時,它將會被調度。
6Transition — 該線程在等待非CPU資源。
7Unknown — 該線程狀態未知。

? ? ? ? 我們再看下TreadWaitReason字段的說明

ValueMeaning

0

Executive

1

FreePage

2

PageIn

3

PoolAllocation

4

ExecutionDelay

5

FreePage

6

PageIn

7

Executive

8

FreePage

9

PageIn

10

PoolAllocation

11

ExecutionDelay

12

FreePage

13

PageIn

14

EventPairHigh

15

EventPairLow

16

LPCReceive

17

LPCReply

18

VirtualMemory

19

PageOut

20

Unknown

? ? ? ? 如何使用WMI枚舉線程狀態(ThreadState)不是5(Waiting)的線程所在的進程ID?

    CSynQueryData recvnotify(L"root\\CIMV2",L"SELECT ProcessHandle FROM Win32_Thread Where ThreadState <> 5" );recvnotify.ExcuteFun();


? ? ? ? 更多關于線程的信息可以參略Win32_Thread。

總結

以上是生活随笔為你收集整理的WMI技术介绍和应用——查询正在运行的线程信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。