Как странно работает поиск потоков. Во-первых, для какого бы процесса мы не сделали снапшот, Thread32First / Thread32Next всеравно выдаст список всех потоков в системе. Далее, поле THREADENTRY32::tpBasePri может быть не только <ul type=disc>THREAD_PRIORITY_IDLE THREAD_PRIORITY_LOWEST THREAD_PRIORITY_BELOW_NORMAL THREAD_PRIORITY_NORMAL THREAD_PRIORITY_ABOVE_NORMAL THREAD_PRIORITY_HIGHEST THREAD_PRIORITY_TIME_CRITICAL</ul> как сказано в MSDN, но и еще хрен знает чем. Прокоментируйте, кто в курсе.
Ты бы еще большее старье юзал, млин. PSAPI надо использовать. А для работы с потоками, вообще NtQueryInformation. И комментировать тут нечего, вторые упаковищики читать и Неббета, там все написано.
_DEN_ всеравно выдаст список всех потоков в системе В справке, к CreateToolhelp32Snapshot, этот факт освещен: "To identify the threads that belong to a specific process, compare its process identifier to the th32OwnerProcessID member of the THREADENTRY32 structure when enumerating the threads". поле THREADENTRY32::tpBasePri может быть ... хрен знает чем Конкретнее.
q_q WinXP без протезов, build 2600, процесс EXPLORER.EXE, приоритеты потоков: Код (Text): 1480 1636 1640 1644 1648 1684 THREAD_PRIORITY_TIME_CRITICAL 1712 968 1728 1156 1936 Вот что сия хрень значит? volodya Я тоже рад тебя видеть А как же MSDN? У меня ему еще и пол года не исполнилось. А как же совместимость?
volodya Ты бы еще большее старье юзал, млин. PSAPI надо использовать. А для работы с потоками, вообще NtQueryInformation. Че-то ты гонишь, порутчик. kernel32.dll импортирует только ntdll.dll и работы с процессами, потоками и остальными прелестями через NtXXX и делаются. Комментарии?
volodya Да и psapi.dll тоже юзает только ntdll.dll и kernel.dll. Не могут же ntdll-евские функции работать по разному, в зависимости от того где их юзают? Или может у psapi.dll есть участки кода, работающие в режиме ядра?
_DEN_ Что-то у тебя цифры странные. Попробовал на 2k_sp4, xppro_sp1 и xppro_sp2. Действительно есть "недокументированные", только у меня 8, 9, 10, THREAD_PRIORITY_TIME_CRITICAL и THREAD_PRIORITY_ABOVE_NORMAL.
q_q Ну может я конечно в четырех строках пять ошибок сделал... Код (Text): vector <THREADENTRY32> TE32; THREADENTRY32 te32; te32.dwSize=sizeof(THREADENTRY32); HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0); if(hSnapshot!=INVALID_HANDLE_VALUE) { if(Thread32First(hSnapshot,&te32)) do if(te32.th32OwnerProcessID==th32ProcessID) TE32.push_back(te32); while(Thread32Next(hSnapshot,&te32)); CloseHandle(hSnapshot); } Не на STL же списывать...
q_q Мать моя женщина... Извиняюсь за поспешные выводы. Вот я тупой урод! Читаю приоритеты я правильно. Вывожу неправильно Все, пофиксил, только у меня всеравно 90% потоков имеют "недокументированные" приоритеты. Численная величина токена говорит о "приоритетности" ?
блин вот вы гоните! THREAD_PRIORITY_IDLE equ -15 THREAD_PRIORITY_LOWEST equ -2 THREAD_PRIORITY_BELOW_NORMAL equ -1 THREAD_PRIORITY_NORMAL equ 0 THREAD_PRIORITY_ABOVE_NORMAL equ 1 THREAD_PRIORITY_HIGHEST equ 2 THREAD_PRIORITY_TIME_CRITICAL equ 15 комментарии нужны?
q_q объясняюсь: всего приоритетов у потоков может быть 31 различных (от -15 до +15). Официальные имена есть только у 7 из них. Остальные лежат между ними по приорететности. Например, 8 - нечто среднее между THREAD_PRIORITY_HIGHEST и THREAD_PRIORITY_TIME_CRITICAL.
сабж выдает все потоки? ну незнаю, так и в msdn написано -Retrieves information about the first thread of any process encountered in a system snapshot.