Demo 0081 獲取程序中線程列表

2022-04-07 08:38:02 字數 1250 閱讀 2312

程序為執行緒提供生存的空間,執行緒為程序的存在提供了時間,沒有執行緒的存在程序沒有存在的意義,乙個程序中可以同時具有多個執行緒,但必須有乙個執行緒,程序生成時建立的第乙個執行緒被稱之為主線程,它可以建立子執行緒,子執行緒還可以建立孫執行緒。本練習用於學習如何獲取系統中所有的執行緒,如何獲取指定程序中所有執行緒。

實現方法:

1.  通過createtoolhelpsnapshot函式建立一線程快照;

2.  使用thread32first以及thread32next函式遍歷系統中所有執行緒,根據比較執行緒父程序id來過濾指定程序的所有執行緒;

3.  關閉執行緒快照控制代碼.

api說明:

1. typedef struct tagthreadentry32 threadentry32

執行緒描述資訊

1.  handle winapi createtoolhelp32snapshot(dword dwflags, dword th32processid);

建立系統快照,當dwflags=th32cs_snapthread時,僅生成系統中線程部分快照

2.  bool winapi thread32first(handle hsnapshot,  lpthreadentry32 lpt2)

獲取執行緒快照中第乙個執行緒資訊

3.  bool winapi thread32next(handle hsnapshot, lpthreadentry32 lpte);

獲取執行緒快照中下乙個執行緒資訊

關鍵**:

2: handle hsnapthread = createtoolhelp32snapshot(th32cs_snapthread, th32processid);
3:

if (invalid_handle_value != hsnapthread)

4: ;
6:

if (thread32first(hsnapthread, &te32))

7:
25:         } while (thread32next(hsnapthread, &te32));
26:     }
27:
28:     closehandle(hsnapthread);
29: }
演示**

程序中線程間通訊

一般而言,應用程式中的乙個次要執行緒總是為主執行緒執行特定的任務,這樣,主線程和次要執行緒間必定有乙個資訊傳遞的渠道,也就是主線程和次要執行緒間要進行通訊。這種執行緒間的通訊不但是難以避免的,而且在多執行緒程式設計中也是複雜和頻繁的,下面將進行說明。由於屬於同乙個程序的各個執行緒共享作業系統分配該程...

windows檢視程序中線程資訊

簡介 經常在linux下開發程式,使用習慣了ps,top,gdb,strace等除錯命令,用起來挺方便。現在需要在在windows下除錯,也查詢了些工具和方法,作一小結。不當之處,請不吝指出。以windows server2008r2系統為例。使用資源管理器 這個方法簡單方便,但所能檢視到的資訊也有...

python中線程 程序 協程

多執行緒 執行緒的併發是利用cpu上下文的切換 是併發,不是並行 多執行緒執行的順序是無序的 多執行緒共享全域性變數 執行緒是繼承在程序裡的,沒有程序就沒有執行緒 gil全域性直譯器鎖 只要在進行耗時的io操作的時候,能釋放gil,所以只要在io密集型的 裡,用多執行緒就很合適 在cpu密集時候不適...