
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
21.07.2005, 18:00
|
|||
|---|---|---|---|
Как вырубить поток, в котором бесконечный цикл? |
|||
|
#18+
Т.е. написал процедуру, в которой бесконечный цикл (ну надо так). Создал TThread, и впихнул его туда. Всё работает хорошо, загрузка проца минимальна, но, при закрытии основного окна, программа не умирает! В обработчике OnClose написано так: b->Terminate(); b->Resume(); delete b; Close(); Action = caFree; // b- это указатель на TThread Как закрыть программу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.07.2005, 18:20
|
|||
|---|---|---|---|
|
|||
Как вырубить поток, в котором бесконечный цикл? |
|||
|
#18+
Я, конечно, дико извиняюсь, но что такое TThread? Если это обыкновенный класс потока, то все должно работать. И вообще, если убивается процесс, то все потоки автоматом убьются. А вообще убивать поток методом Terminate крайне не рекомендуется этикетом и соображениями разумности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.07.2005, 18:35
|
|||
|---|---|---|---|
|
|||
Как вырубить поток, в котором бесконечный цикл? |
|||
|
#18+
А в цикле проверяется Terminated? должно быть что-то вроде: while (!Terminated) { ... } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.07.2005, 18:54
|
|||
|---|---|---|---|
|
|||
Как вырубить поток, в котором бесконечный цикл? |
|||
|
#18+
Скорее всего программа пишется на Borland C++ Builder :) Метод Terminate класса TThread всего лишь устанавливает значение поля Terminated в TRUE. При этом разработчики Win32 и VCL предполагали, что функция потока будет САМА и ПЕРИОДИЧЕСКИ проверять значение этого свойства. Так что либо в вашем бесконечном цикле проверяйте значение Terminated, либо жестко завершайте поток через WINAPI TerminateThread(). Про недостатки последнего способа прочитайте в MSDN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.07.2005, 18:56
|
|||
|---|---|---|---|
Как вырубить поток, в котором бесконечный цикл? |
|||
|
#18+
Не надо было делать b->Resume; delete b; всё заработало и так, при исп. Terminated ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.07.2005, 19:40
|
|||
|---|---|---|---|
|
|||
Как вырубить поток, в котором бесконечный цикл? |
|||
|
#18+
Александр СпелицинМетод Terminate класса TThread всего лишь устанавливает значение поля Terminated в TRUE. Приношу свои извинения. :) Тогда, действительно, все очевидно - потоку нужно проверять в цикле, не захотел ли кто его убить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&mobile=1&tid=2032988]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 325ms |

| 0 / 0 |
