| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Завершение процедуры |
| Автор: Slawanix 16.8.2004, 00:10 |
| Подскажите, пожалуйста: можно ли из одной процедуры, например при нажатии кнопки, прервать выполнение другой процедуры (к примеру копирование файлов в цикле). Если можно, дайте хоть какой-нибудь намек, как...Please. |
| Автор: Burich-Caeser 16.8.2004, 01:06 |
| А простой вариант, чтобы процедура, которая должна прерваться проверяла какую-нить bool переменную и, если что, то exit не прокатит? В обработчике нажатия, например меняешь эту самую переменную... Только, наверное в обрабатываемой будет нелишним писать Application.ProcessMessage; Как всегда, желаю удачи с проектом |
| Автор: S.A.P. 16.8.2004, 10:11 |
| Используй потоки: копирование файлов осуществляет один поток, а обработку нажатия клавиши-другой. Поток можно приостановить, изменить приоритет или уничтожить. Чтобы не изобретать велосипед,IMHO для нескольких параллельно выполняемых операций потоки - самое оптимальное решение. |
| Автор: Song 16.8.2004, 10:43 |
| по установке глобального флага. |
| Автор: Slawanix 17.8.2004, 22:28 |
| Burich-Caeser , я поискал в форуме по потокам и нашел твои ссылочки, они мне пригодились, спасибо Также спасибо Perchilla и Song ; Сечас набрал кучу доков, ушел разбираться. Удачи! |
| Автор: Burich-Caeser 18.8.2004, 01:10 |
| Slawanix Всегда пожалуйста. |
| Автор: Medved 18.8.2004, 09:32 |
| Можешь отправлять сообщения. SendMessage, PostMessage. |
| Автор: Slawanix 21.8.2004, 00:35 | ||||||||||||||
Pegas, Спасибо, попробую воспользоваться твоим советом, но пока я уже начал делать с потоками, и тут у меня возникла проблемка(см.ниже<>если интересно). С уважением, Slawanix. Добавлено @ 00:42 Поммжите, пожалуйста разобраться с потоком. Сейчас объясню, в чем дело. Вот модуль с потоком:
Вот так я вызываю поток в главном модуле:
Проблема такая: хочу сделать
если делаю:
А нужно либо приостановить поток, либо вообще грохнуть. Примечание: функция ScannerBoss ,без ипользования потока работает номано, и я думаю, она здесь ни при чем. Заранее очень благодарен. |
| Автор: youri 21.8.2004, 20:34 | ||
| 1. Не понял, зачем ты использовал Synchronized 2. Написал небольшую прогу (даже самому понравилось). Четыре кнопки (Execute, Suspend, Resume, Terminate) и ProgressBar
|
| Автор: Pakshin A. S. 21.8.2004, 21:29 | ||
Может для управления вимзуальными компонентами... Как я понял, что гораздо лучше и культурней общаться с формой и компонентами через синхронизацию. (анти-примером в этом случае может служить код youri, тока без обид Добавлено @ 21:34 И ещё: для простейшего способа гарантированно освободить объект потока - установить в начале Execute свойства FreeOnTerminate равным True. |
| Автор: Slawanix 21.8.2004, 22:52 | ||||
Да, как и сказал Pakshin A. S. , в процедуре ScannerBoss действительно доступ к объектам VCL идет.
Это я пробовал - результат такой же, только вот в ScannerBoss у меня вызывается еще пара процедур, может быть дело в этом и нужно в поток помещать чистую процедуру без вложенных... надо попробовать, если получиться расскажу. Спасибо. Но пока еще тема не закрыта. |
| Автор: Pakshin A. S. 22.8.2004, 12:42 |
| FreeOnTerminate - это так, для культуры. Можно и без этого обходиться, как в примере youri . |
| Автор: Slawanix 22.8.2004, 23:22 | ||
Мне тоже понравилось, простенько и достаточно наглядно работает. Только я одного не понял, у меня так пока и не получилось, таким же образом заправить свою процедуру, в которой идет вызов других, описанных в других модулях, напрашивается предположение, что придется все описывать в методе Execute; муторно, но наверное так и сделаю. С уважением, Slawanix |
| Автор: Slawanix 29.8.2004, 15:21 |
| Нашел вариант как создать поток без TThread - при помощи API функций (BeginThread;SuspendThread;ResumeThread;TerminateThread), но я не знаю, можно ли как-то синхронизировать АПИшные потоки (это необходимо для доступа к компонентам VCL), типа как это делается в Дэлфе(Synchronize)? Помогите,если кто может, пожалуйста. С уважением, Slawanix. |