![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как остановить работающую программу? [D7, Win2k, WinXP]
pavel_guzhanov © (2005-01-13 13:56:00)Здравствуйте!
Подскажите пожалуйста, как закрыть программу во время выполнения в ней очень длинного цикла? У меня программа при работе показывает иконку в трее, у нее есть popup meny с одной командой - "Выход".
При работе программы выполняется очень длинный цикл (примерно минут 40). А мне надо, чтобы по команде "Выход" программа закрылась. Подскажите, как это можно сделать. Я предполагаю, что команду "Выход" надо подавать в отдельном потоке, а можно ли как то обойтись без отдельного потока? Подскажите, кто в курсе.
Заранее спасибо...
pavel_guzhanov (2005-01-14 15:05:00) [1]
> тебе не Выход в поток надо а сам цикл...
> Лучше, наверное, сделать цикл в отдельном потоке.
Действительно, цикл, и все, что с ним связано, убрал в отдельный поток. Помогло, теперь программа вырубается нормально. Спасибо
KSergey (2005-01-14 12:56:00) [2]> [9] Virgo_Style (14.01.05 09:25)
> Application.Terminate, imho, слишком жестоко
Чем же? По сути оно тоже лишь взводит флаг...
Virgo_Style (2005-01-14 09:25:00) [3]> [8] Иначе будет типа не круто. ;)
Если я правильно понял проблему, то мое решение:
1.var ExitFlag:boolean=false;
2.В начале процедуры ExitFlag:=false;
3.В цикле - Application.ProcessMessages;
4.Кнопка "Выход" (или пункт меню) устанавливает флаг ExitFlag
5.Цикл проверяет этот флаг, если он установлен - выходит досрочно.
Вот и все...
Еще можно ставить этот флаг где-нибудь в OnCloseQuery, например.
ExitProcess и Application.Terminate, imho, слишком жестоко :)
Digitman (2005-01-13 17:54:00) [4]
> О, мужик! У меня схожая трабла - я рулю резак,
именно НАСТОЯЩИЕ программеры именно так и формулирукют свою мысль)
1.не иначе как МУЖИК
2.не иначе как ТРАБЛА
3.не иначе как РУЛЮ (или не РУЛЮ - кому ведомо, что сие есть ?!)
4.не иначе как РЕЗАК ( ... что-то, вероятно, из терминологии слесаря-многостаночника..)
ай да не угадал ужели ?(
Zilog (2005-01-13 17:44:00) [5]тебе не Выход в поток надо а сам цикл...
Neznaika (2005-01-13 14:24:00) [6]Аааа!
KSergey (2005-01-13 14:20:00) [7]> [4] Neznaika © (13.01.05 14:14)
> Не пойму чем не подходит Application.Terminate;
Фигли оно у них сработает, если сообщения не проталкиваются
А в цикле - не проверяется флаг Application.Terminated
Neznaika (2005-01-13 14:14:00) [8]Не пойму чем не подходит Application.Terminate;
Может объясните?
kaZaNoVa (2005-01-13 14:11:00) [9]
ExitProcess
Halt
WhiteGuy (2005-01-13 14:07:00) [10]О, мужик! У меня схожая трабла - я рулю резак, и при разрезании бААААльшого файла прога винтик красиво насилует, а остановить:) этот процесс можно лишь перезагрузкой! Подключаюсь к вопросу!! ;-D
JK (2005-01-13 14:06:00) [11]В тело цикла вставь
Application.ProcessMessages;
Лучше, наверное, сделать цикл в отдельном потоке.