|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.08.2015, 09:24 | #1 |
Пользователь
Регистрация: 30.11.2011
Сообщений: 18
|
Поток в процедуре
Имеется код, как сделать его в потоке (procedure TForm1.WndProc)???
Код:
С потоками ни разу не сталкивался, извините за нубство Собственно суть в том, что бы при нажатии кнопки мыши создавался поток, а при отжатии - "разрушался". |
16.08.2015, 12:32 | #2 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
А зачем WndProc? У формы есть свои события обработки (если, конечно, не требуется все контролы контролировать)
При нажатии старт, при отжатии - финиш? Можно в заморозку отправить suspend-ом, а потом разморозить resume. Правда, методы deprecated, но если поток не синхронизируется, то это безопасно. Это если не нужно сбрасывать состояние потока в начальное положение. Не знаю как устроена процедура TMyThread.Execute, но я бы добавил туда проверку на флаг завершения (если это возможно). Собственно ничего не скажу, т.к. не знаю для чего это нужно и как выглядит. |
16.08.2015, 15:39 | #3 | |
Пользователь
Регистрация: 30.11.2011
Сообщений: 18
|
Цитата:
|
|
16.08.2015, 16:14 | #4 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
Подробности засекречены? Как прекратить? Мгновенно? А если там кэш на диск сбрасывается или ещё чего опасного. Или дать доработать текущей итерации? Или там нет итераций? А как долго поток обрабатывает клик? А если пользователь очень много кликает это же нагрузка на каждое создание/удаление "тяжёлого" TThread.
Собственно, в классе завести публичную переменную IsWork. При нажатии кнопки ставить её в true, а при отжатии в false. А поток пусть выполняет то что нужно если IsWork = true. Этот способ хорош, если есть цикличность Чтобы не было зря потраченных ресурсов (это немного гуманнее) можно использовать семафоры (мьютексы, критические секции и им подобное) для временной блокировки потока в нужном месте. Этот способ не остановит поток мгновенно, остановка только в определённых местах. Если поток "изолирован" от других потоков, то те же suspend/resume сгодятся. Если поток надо резко выключить, то надо пересмотреть алгоритм, потому что так делать можно, но неправильно. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вычисление в процедуре | desnet | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 06.05.2012 17:23 |
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. | Человек_Борща | Общие вопросы Delphi | 8 | 27.02.2012 23:24 |
Процедура в процедуре. | Annonim | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 26.08.2011 16:32 |
Поток. Не получается создать поток. Выдает ошибки при запуске | bigory | Общие вопросы по Java, Java SE, Kotlin | 3 | 23.09.2010 00:40 |
Закрытие в процедуре. | segail | Microsoft Office Excel | 4 | 17.03.2010 17:16 |