![]() |
|
|
Регистрация Восстановить пароль |
|||||||
| Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
||||
![]() |
|
|
|
Опции темы | Поиск в этой теме |
|
|
#1 |
|
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
Привет всем!
У меня такой вопрос: Как мне немедленно завершить поток? Вот у меня, скажем, есть поток (myThread: tMyThread); Допустим в процедуре потока (execute) выполняется код с несколькими sleep-ами. Как мне немедленно прервать выполнение такого потока? Что-бы вы мне не писали о terminate, скажу, что в потоке вызываться функция, скажем из DLL, которая должна что-то там сделать и которая выполняется определённое время. Как мне прервать выполнение потока? Если делаю так: myThread.destroy или suspend, то поток ждёт, пока вызванная процедура завершиться и только после этого уничтожаеться... |
|
|
|
|
|
#2 |
|
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
задачу раскрой подробнее, по любому есть другие пути решения.
I'm learning to live...
|
|
|
|
|
|
#3 | |
|
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
TerminateThread прибивает поток немедленно, но мешать API с TThread не рекомендуется, т.к. там свои механизмы синхронизации и управления потоками, опять же:
Цитата:
пыщь
|
|
|
|
|
|
|
#4 |
|
Форумчанин
Регистрация: 31.05.2007
Сообщений: 486
|
|
|
|
|
|
|
#5 |
|
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
|
|
|
|
|
|
#6 |
|
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
1. В execute и всех методах, вызываемых из него, должна быть конструкция типа
Код:
3. Принудительно завершить поток можно в любой момент, вызвав TerminateThread(myThread.Handle, 0);, но это плохой способ + нет гарантии, что последующий myThread.Free; отдаст обратно все ресурсы.
пыщь
|
|
|
|
|
|
#7 |
|
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
А при обычном завершении (после выполнения) потока он сам отдаёт ресурсы, или мне надо самому вызывать метод free последней строчкой в execute?
|
|
|
|
|
|
#8 |
|
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Отдаст сам, если установить свойство FreeOnTerminate:=true;
А в потоке пытатся, пардон, отFree`ть самого себя естественно нельзя =)
пыщь
|
|
|
|
|
|
#9 |
|
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
А перезапустить поток можно, после того, как он завершиться? Или надо новый создавать?
|
|
|
|
|
|
#10 |
|
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Нет нельзя. Вы видать не понимаите что такое поток... ну представьте себе такую схему
ВХОД В ПОТОК ВЫХОД ИЗ ПОТОКА Все... между входом и выходом должно быть Код:
Все на самом деле, приметивно и удобно, не надо закручивать с динамическими созданиями нескольких потоков.. p.s. сначла своей практики с потоками, сам так думал, что надо делать каждый раз новый поток, но знания приходят со временем
|
|
|
|
![]() |
|
| Опции темы | Поиск в этой теме |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Остановка Memo | Sanek777 | Общие вопросы Delphi | 1 | 11.09.2008 15:50 |
| Ricoh Aficio FX200, замятие(остановка печати) | PDVich | Компьютерное железо | 0 | 07.05.2008 10:22 |
| Управление потоками. Запуск, остановка, приоритет потока. | metamfetamin | Помощь студентам | 5 | 11.11.2007 12:45 |
| Остановка ADODS при OnFetchProcess | QuAlex | БД в Delphi | 0 | 04.10.2007 17:31 |