опубликован 04-04-2001 00:35 MSK
2 Pavel7351. Взгляни, это должно помочь. А еще - ВНИМАТЕЛЬНО ПОЧИТАЙ SDK, там обо всем хорошо написано.
The following function takes a snapshot of the threads currently executing in the system and walks through the list recorded in the snapshot.
// Returns TRUE if the threads were successfully enumerated
// and listed or FALSE if the threads could not be enumerated
// or listed.
// hListView - handle of the listview that lists thread information
// dwOwnerPID - identifier of the process whose threads are to
// be listed
BOOL RefreshThreadList (HWND hListView, DWORD dwOwnerPID)
{
HANDLE hThreadSnap = NULL;
BOOL bRet = FALSE;
THREADENTRY32 te32 = {0};
// Take a snapshot of all threads currently in the system.
hThreadSnap = pCreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (hThreadSnap == (HANDLE)-1)
return (FALSE);
// Clear the current contents of the thread list view
// (which are now old).
ListView_DeleteAllItems(g_hwndThread);
// Fill in the size of the structure before using it.
te32.dwSize = sizeof(THREADENTRY32);
// Walk the thread snapshot to find all the threads of the process.
// If the thread belongs to the process, add its information
// to the display list.
if (pThread32First(hThreadSnap, &te32)) {
do {
if (te32.th32OwnerProcessID == dwOwnerPID) {
TINFO ti;
ti.tid = te32.th32ThreadID;
ti.pidOwner = te32.th32OwnerProcessID;
ti.tpDeltaPri = te32.tpDeltaPri;
ti.tpBasePri = te32.tpBasePri;
AddThreadItem(hListView, ti);
}
}
while (pThread32Next(hThreadSnap, &te32));
bRet = TRUE;
}
else
bRet = FALSE; // could not walk the list of threads
// Do not forget to clean up the snapshot object.
CloseHandle (hThreadSnap);
return (bRet);
}
Описалово на THREADENTRY32.
Describes an entry from a list that enumerates the threads executing in the system when a snapshot was taken.
typedef struct tagTHREADENTRY32{
DWORD dwSize;
DWORD cntUsage;
DWORD th32ThreadID;
DWORD th32OwnerProcessID;
LONG tpBasePri;
LONG tpDeltaPri;
DWORD dwFlags;
} THREADENTRY32;
typedef THREADENTRY32 * PTHREADENTRY32;
typedef THREADENTRY32 * LPTHREADENTRY32;
Members
dwSize
Specifies the length, in bytes, of the structure. Before calling the Thread32First function, set this member to
sizeof(THREADENTRY32).
cntUsage
Number of references to the thread. A thread exists as long as its usage count is nonzero. As soon as its usage count becomes zero, a thread terminates.
th32ThreadID
Identifier of the thread. This identifier is compatible with the thread identifier returned by the CreateProcess function.
th32OwnerProcessID
Identifier of the process that created the thread. The contents of this member can be used by Win32 API elements.
tpBasePri
Initial priority level assigned to a thread. These values are defined:
THREAD_PRIORITY_IDLE
Indicates a base priority level of 1 for IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, or HIGH_PRIORITY_CLASS processes, and a base priority level of 16 for REALTIME_PRIORITY_CLASS processes.
THREAD_PRIORITY_LOWEST
Indicates 2 points below normal priority for the priority class.
THREAD_PRIORITY_BELOW_NORMAL
Indicates 1 point below normal priority for the priority class.
THREAD_PRIORITY_NORMAL
Indicates normal priority for the priority class.
THREAD_PRIORITY_ABOVE_NORMAL
Indicates 1 point above normal priority for the priority class.
THREAD_PRIORITY_HIGHEST
Indicates 2 points above normal priority for the priority class.
THREAD_PRIORITY_TIME_CRITICAL
Indicates a base priority level of 15 for IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, or HIGH_PRIORITY_CLASS processes, and a base priority level of 31 for REALTIME_PRIORITY_CLASS processes.
tpDeltaPri
Change in the priority level of a thread. This value is a signed delta from the base priority level assigned to the thread.
dwFlags
Reserved; do not use.