|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.02.2009, 13:55 | #1 |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
Немедленная остановка потока.
Привет всем!
У меня такой вопрос: Как мне немедленно завершить поток? Вот у меня, скажем, есть поток (myThread: tMyThread); Допустим в процедуре потока (execute) выполняется код с несколькими sleep-ами. Как мне немедленно прервать выполнение такого потока? Что-бы вы мне не писали о terminate, скажу, что в потоке вызываться функция, скажем из DLL, которая должна что-то там сделать и которая выполняется определённое время. Как мне прервать выполнение потока? Если делаю так: myThread.destroy или suspend, то поток ждёт, пока вызванная процедура завершиться и только после этого уничтожаеться... |
03.02.2009, 14:55 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
задачу раскрой подробнее, по любому есть другие пути решения.
I'm learning to live...
|
03.02.2009, 15:37 | #3 | |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
TerminateThread прибивает поток немедленно, но мешать API с TThread не рекомендуется, т.к. там свои механизмы синхронизации и управления потоками, опять же:
Цитата:
пыщь
|
|
03.02.2009, 21:45 | #4 |
Форумчанин
Регистрация: 31.05.2007
Сообщений: 486
|
|
04.02.2009, 13:02 | #5 |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
|
04.02.2009, 14:31 | #6 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
1. В execute и всех методах, вызываемых из него, должна быть конструкция типа
Код:
3. Принудительно завершить поток можно в любой момент, вызвав TerminateThread(myThread.Handle, 0);, но это плохой способ + нет гарантии, что последующий myThread.Free; отдаст обратно все ресурсы.
пыщь
|
05.02.2009, 04:45 | #7 |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
А при обычном завершении (после выполнения) потока он сам отдаёт ресурсы, или мне надо самому вызывать метод free последней строчкой в execute?
|
05.02.2009, 15:19 | #8 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Отдаст сам, если установить свойство FreeOnTerminate:=true;
А в потоке пытатся, пардон, отFree`ть самого себя естественно нельзя =)
пыщь
|
05.02.2009, 16:33 | #9 |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
А перезапустить поток можно, после того, как он завершиться? Или надо новый создавать?
|
05.02.2009, 16:39 | #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 |