|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Не правильно завершаю работу потока
Всем привет!
Столкнулся с проблемой при работе с потоками. Когда во время работающего потока, вызываю Terminate. Для работы с потоками использую библиотеку OmniThreadLibrary (это библиотека для создания многопоточных приложений в Delphi). создаю класс как наследник от TOmniWorker Код:
TTask = class(TOmniWorker) public function Initialize: boolean; override; //здесь инициализирую нужные для работы потока объекты и переменные procedure Cleanup; override; //здесь их разрушаю procedure CountInt; //тут выполняю всякие действия end; Код:
uses OtlThreadPool, OtlTaskControl, OtlEventMonitor, OtlCommon, OtlComm, OtlTask ... pablic Task : IOmniTaskControl; ... Task:=CreateTask(TTask.Create(),'Task ')); //создаю поток Task.Run;//запускаю его Task.Invoke(@TTask.CountInt, []);//выполняю метод CountInt Код:
if Task <> nil then begin Task.Terminate; //завершаем Task:=nil; end; Код:
Task.Terminate(3000); Знающие люди, подскажите что я делаю не так, в какую сторону копать как новичку? |
#2
|
||||
|
||||
Никогда не пользовался сторонними библиотеками для работы с потоками.
Обычно завершаю поток таким образом: Код:
FThread.Terminate; //установили потоку флажок говорящий о том что неплохо бы завершиться FThread.WaitFor; //подождали пока поток закончит все свои действия FThread.Free; //вызвали деструктор потока И всегда работало на ура, я даже не знал о существовании каких-либо библиотек для работы с потоками, потому что нужды не было в этом. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
||||
|
||||
Ну, вот есть такая библиотека. И тут немного по другому делается.
Сначала думал, что я неправильно останавливаю тело потока, что из-за него Task.Terminate висит, ожидая завершения действий в потоке. Но тут что-то другое... И фиг знает, что не так... |
#4
|
||||
|
||||
сделай по-человечески через TThread и тебе будет проще помочь
Пишу программы за еду. __________________ |