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

start [/forum/topic.php?fid=57&msg=33178855&tid=2032988]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 364ms |

| 0 / 0 |
