![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Slawanix |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 29.7.2004 Где: г. Великие Луки Репутация: нет Всего: 1 |
Подскажите, пожалуйста: можно ли из одной процедуры, например при нажатии кнопки, прервать выполнение другой процедуры (к примеру копирование файлов в цикле).
Если можно, дайте хоть какой-нибудь намек, как...Please. --------------------
моск кипит |
|||
|
||||
| Burich-Caeser |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 28.7.2004 Репутация: нет Всего: 1 |
А простой вариант, чтобы процедура, которая должна прерваться проверяла какую-нить bool переменную и, если что, то exit не прокатит? В обработчике нажатия, например меняешь эту самую переменную...
Только, наверное в обрабатываемой будет нелишним писать Application.ProcessMessage; Как всегда, желаю удачи с проектом --------------------
Ты брошен вниз силой судьбы,Ты унижен и раздавлен,Время забыть то, кем ты был,Но помнить, кем ты стал... |
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: 2 Всего: 71 |
Используй потоки: копирование файлов осуществляет один поток, а обработку нажатия клавиши-другой. Поток можно приостановить, изменить приоритет или уничтожить. Чтобы не изобретать велосипед,IMHO для нескольких параллельно выполняемых операций потоки - самое оптимальное решение.
|
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
по установке глобального флага.
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Slawanix |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 29.7.2004 Где: г. Великие Луки Репутация: нет Всего: 1 |
Burich-Caeser , я поискал в форуме по потокам и нашел твои ссылочки, они мне пригодились, спасибо
Также спасибо Perchilla и Song ; Сечас набрал кучу доков, ушел разбираться. Удачи! --------------------
моск кипит |
|||
|
||||
| Burich-Caeser |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 28.7.2004 Репутация: нет Всего: 1 |
Slawanix
Всегда пожалуйста. --------------------
Ты брошен вниз силой судьбы,Ты унижен и раздавлен,Время забыть то, кем ты был,Но помнить, кем ты стал... |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Можешь отправлять сообщения. SendMessage, PostMessage.
-------------------- |
|||
|
||||
| Slawanix |
|
||||||||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 29.7.2004 Где: г. Великие Луки Репутация: нет Всего: 1 |
Pegas, Спасибо, попробую воспользоваться твоим советом, но пока я уже начал делать с потоками, и тут у меня возникла проблемка(см.ниже<>если интересно). С уважением, Slawanix. Добавлено @ 00:42 Поммжите, пожалуйста разобраться с потоком. Сейчас объясню, в чем дело. Вот модуль с потоком:
Вот так я вызываю поток в главном модуле:
Проблема такая: хочу сделать
если делаю:
А нужно либо приостановить поток, либо вообще грохнуть. Примечание: функция ScannerBoss ,без ипользования потока работает номано, и я думаю, она здесь ни при чем. Заранее очень благодарен. Это сообщение отредактировал(а) Slawanix - 21.8.2004, 16:31 --------------------
моск кипит |
||||||||||||||
|
|||||||||||||||
| youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: нет Всего: 16 |
1. Не понял, зачем ты использовал Synchronized
2. Написал небольшую прогу (даже самому понравилось). Четыре кнопки (Execute, Suspend, Resume, Terminate) и ProgressBar
|
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 21 Всего: 61 |
Может для управления вимзуальными компонентами... Как я понял, что гораздо лучше и культурней общаться с формой и компонентами через синхронизацию. (анти-примером в этом случае может служить код youri, тока без обид Добавлено @ 21:34 И ещё: для простейшего способа гарантированно освободить объект потока - установить в начале Execute свойства FreeOnTerminate равным True. |
|||
|
||||
| Slawanix |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 29.7.2004 Где: г. Великие Луки Репутация: нет Всего: 1 |
Да, как и сказал Pakshin A. S. , в процедуре ScannerBoss действительно доступ к объектам VCL идет.
Это я пробовал - результат такой же, только вот в ScannerBoss у меня вызывается еще пара процедур, может быть дело в этом и нужно в поток помещать чистую процедуру без вложенных... надо попробовать, если получиться расскажу. Спасибо. Но пока еще тема не закрыта. --------------------
моск кипит |
||||
|
|||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 21 Всего: 61 |
FreeOnTerminate - это так, для культуры. Можно и без этого обходиться, как в примере youri .
|
|||
|
||||
| Slawanix |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 29.7.2004 Где: г. Великие Луки Репутация: нет Всего: 1 |
Мне тоже понравилось, простенько и достаточно наглядно работает. Только я одного не понял, у меня так пока и не получилось, таким же образом заправить свою процедуру, в которой идет вызов других, описанных в других модулях, напрашивается предположение, что придется все описывать в методе Execute; муторно, но наверное так и сделаю. С уважением, Slawanix --------------------
моск кипит |
|||
|
||||
| Slawanix |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 29.7.2004 Где: г. Великие Луки Репутация: нет Всего: 1 |
Нашел вариант как создать поток без TThread - при помощи API функций
(BeginThread;SuspendThread;ResumeThread;TerminateThread), но я не знаю, можно ли как-то синхронизировать АПИшные потоки (это необходимо для доступа к компонентам VCL), типа как это делается в Дэлфе(Synchronize)? Помогите,если кто может, пожалуйста. С уважением, Slawanix. --------------------
моск кипит |
|||
|
||||
![]()
|
| Правила форума "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. |