![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
DmitryHT |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 31.8.2007 Репутация: нет Всего: нет |
Как узнать состояние потока?
Т.е. как безошибочно определить состояние потока учитывая то, что поток мог быть еще не запущен, либо уже завершен, либо в процессе. Нужно для того, чтобы определить свободен ли данный поток для запуска.
p.s. возможно туплю... ![]() |
|||
|
||||
Alix |
|
|||
![]() L45 ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 4.5.2005 Где: Pskov/Spb Репутация: 7 Всего: 23 |
Возможно, так.
Все зависит от того как ты их завершаешь. Как? -------------------- Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой High tech. Low live. (с) Gardner Dozois |
|||
|
||||
DmitryHT |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 31.8.2007 Репутация: нет Всего: нет |
вот так:
Добавлено через 7 минут и 56 секунд Alix, в твоем случае срабатывает только когда поток еще не запускался. После первого запуска он становится Assigned даже не смотря на potok[i].FreeOnTerminate(True); |
||||
|
|||||
Rennigth |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
DmitryHT,
Вызываешь ZwQuerySystemInformation с параметром SYSTEMPROCESSESANDTHREADSINFORMATION. Получаем структуру:
State и будет состояние потока. Возможные состояния вот:
P.S. Метод не проверял пока, только теория, но функцию сделаю, т.к. и мне понадобиться ![]() P.S.S. мб есть и другой более простое решение. -------------------- (* Honesta mors turpi vita potior *) |
||||
|
|||||
Alix |
|
||||
![]() L45 ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 4.5.2005 Где: Pskov/Spb Репутация: 7 Всего: 23 |
Да. В моем случае надо в событии OnTerminate делать
В помощь: как узнать, завершился ли поток и еще Многопоточность - как это делается в Дельфи. Не используйте потоки, не прочитав это Это сообщение отредактировал(а) Alix - 28.9.2007, 08:21 -------------------- Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой High tech. Low live. (с) Gardner Dozois |
||||
|
|||||
Rennigth |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
DmitryHT, функция:
Использование:
Функция принимает ID потока. У Tthread есть св-во ThreadID, его и используй в качестве параметра. Это сообщение отредактировал(а) Rennigth - 28.9.2007, 10:20 -------------------- (* Honesta mors turpi vita potior *) |
||||
|
|||||
DmitryHT |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 31.8.2007 Репутация: нет Всего: нет |
спасибо помогло ;) |
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 2 Всего: 3 |
Не очень быстрый вариант приходится перебирать все потоки, мне кажется должна быть готовая API-функция -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
Alix |
|
|||
![]() L45 ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 4.5.2005 Где: Pskov/Spb Репутация: 7 Всего: 23 |
Сделать SuspendThread, если вернула -1, значит был работающим, иначе вернет предыдущее значение thread suspend count. После этой проверки сделать ResumeThread, чтобы вернуть все на место
![]() -------------------- Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой High tech. Low live. (с) Gardner Dozois |
|||
|
||||
Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
Готовая какая? По хендлу? Даже если бы такая и была, она действовала по такому же принципу, только еще бы и ID этого потока искала(могу, ошибаться, уж незнаю как сама винда получает доступ к своим системным объктам). Да и тем более если честно немогу придумать случая когда это нужно, если ты знаешь только хендл... В любом случае, ни по ID, ни по хендлу вроде нету, уж документированной точно. -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 2 Всего: 3 |
значит был УЧИЧТОЖЕН, но SuspendThread не позволяет определить был ли поток приостановлен -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
Alix |
|
|||
![]() L45 ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 4.5.2005 Где: Pskov/Spb Репутация: 7 Всего: 23 |
извиняюсь, это я обшибся, если работал, то вернет 0, если не существовал, вернет -1, если > 0, то был приостановлен -------------------- Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой High tech. Low live. (с) Gardner Dozois |
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 2 Всего: 3 |
Я тут узнал, для того чтобы узнать существует ли поток или нет достаточно использовать GetExitCodeThread -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |