Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.01.2013, 10:20
Аватар для TolAlik
TolAlik TolAlik вне форума
Прохожий
 
Регистрация: 02.10.2009
Сообщения: 41
Репутация: 10
По умолчанию Не правильно завершаю работу потока

Всем привет!
Столкнулся с проблемой при работе с потоками. Когда во время работающего потока, вызываю Terminate.
Для работы с потоками использую библиотеку OmniThreadLibrary (это библиотека для создания многопоточных приложений в Delphi).

создаю класс как наследник от TOmniWorker
Код:
TTask = class(TOmniWorker)
  public
    function Initialize: boolean; override; //здесь инициализирую нужные для работы потока объекты и переменные
    procedure Cleanup; override; //здесь их разрушаю
    procedure CountInt; //тут выполняю всякие действия
  end;
В событии OnCreate у формы создаю поток
Код:
uses
  OtlThreadPool, OtlTaskControl, OtlEventMonitor, OtlCommon, OtlComm, OtlTask
...
pablic
  Task : IOmniTaskControl;
...
Task:=CreateTask(TTask.Create(),'Task ')); //создаю поток
Task.Run;//запускаю его
Task.Invoke(@TTask.CountInt, []);//выполняю метод CountInt
В событии OnDestroy у формы завершаю работу потока
Код:
if Task <> nil then
begin
  Task.Terminate; //завершаем
  Task:=nil;
end;
Если закрыть приложение в то время как поток делает какие-то действия, то на этом намертво повисает GUI оболочка приложения, которая ждет пока Terminate получит ответа от потока (хотя в примере от библиотеки все работает замечательно). Или наоборот указать
Код:
Task.Terminate(3000);
тогда поток завершиться точно через указанный промежуток времени, но не выполнят метод Cleanup(который срабатывает при завершении работы потока), получается что объекты которые были созданы при работе потока не разрушаются.

Знающие люди, подскажите что я делаю не так, в какую сторону копать как новичку?
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:02.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025