Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2012, 09:30   #1
unmazable
 
Регистрация: 13.07.2009
Сообщений: 9
По умолчанию Проблемы с потоками(Thread)

Создаю в потоке компонент, например TTimer
Код:
 
  TTimerThread = class(TThread)
    procedure onTimerT(Sender: TObject);
  private
    Tim:TTimer;
  protected
    procedure Execute; override;
  end;
в процедуре onTimerT пишу
Код:
procedure TTimerThread.onTimerT(Sender: TObject);
begin
 form1.Memo1.Lines.Add('asdsd')
end;
Пробовал запись в файл,все равно не получается
На Execute
Код:
procedure TTimerThread.Execute;
begin
  Tim:=TTimer.Create(nil);//создаем компонент
  tim.OnTimer := onTimerT;//подключаем нашу процедуру
  Tim.Interval:=1000;//выставляем интервал
  Tim.Enabled :=true;//запускаем таймер
end;
потом по батону запускаю поток
Код:
procedure TForm1.btn1Click(Sender: TObject);
begin
  Proc := TTimerThread.Create(true);
  Proc.Priority := tpLowest;
  Proc.Resume;
end;
если все тоже самое делаю без потока , то процедура onTimerT обрабатывается, как я понимаю поток завершается не дожидаясь ивента. Как сделать так что бы поток завершался только при закрытии формы или при вызове функции/процедуры?

Последний раз редактировалось unmazable; 13.03.2012 в 09:32.
unmazable вне форума Ответить с цитированием
Старый 13.03.2012, 09:39   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Поток не зависимо от вас работает. На то это и поток. Ели ему нечего делать в execute, то поток отмирает.

Проверять на управл. событие с формы можно так:
Код:
if terminated then exit
НО это будет работать, пока поток жив и поток не зависит от этого. Например в потоке некий цикл, из которого надобы выйти в случае завершения программы.

Вместо TTimer используйте мульмедийный таймер.
Человек_Борща вне форума Ответить с цитированием
Старый 13.03.2012, 10:01   #3
unmazable
 
Регистрация: 13.07.2009
Сообщений: 9
По умолчанию

мне TTimer или мульмедийный таймер не нужны.
Смысл в том что если в потоке создавать компонент, к нему цеплять какойнить ивент, то поток завершается выполнив все в Execute , хотя у компонента есть ивент, и этот ивент еще не сработал...
unmazable вне форума Ответить с цитированием
Старый 13.03.2012, 10:09   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

1. поток живет в Execute
2. Таймер без обработки сообщений не сработает

зацикливай в Execute обработку сообщений

Код:
procedure TTimerThread.Execute;
begin
  Tim:=TTimer.Create(nil);//создаем компонент
  tim.OnTimer := onTimerT;//подключаем нашу процедуру
  Tim.Interval:=1000;//выставляем интервал
  Tim.Enabled :=true;//запускаем таймер
while not Terminated do
begin
   GetMessage(...)
  DispatchMessage(...)
end;
Tim.Free;
end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 13.03.2012, 10:24   #5
unmazable
 
Регистрация: 13.07.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
1. поток живет в Execute
2. Таймер без обработки сообщений не сработает

зацикливай в Execute обработку сообщений

Код:
procedure TTimerThread.Execute;
begin
  Tim:=TTimer.Create(nil);//создаем компонент
  tim.OnTimer := onTimerT;//подключаем нашу процедуру
  Tim.Interval:=1000;//выставляем интервал
  Tim.Enabled :=true;//запускаем таймер
while not Terminated do
begin
   GetMessage(...)
  DispatchMessage(...)
end;
Tim.Free;
end;
Спасибо, заработало. Буду развлекаться
unmazable вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Thread. проблемы с работой потока. Моментально исчезают созданные в потоке формы. Casper-SC Общие вопросы .NET 3 24.04.2010 12:28
Проблемы с потоками в С m9yt Общие вопросы C/C++ 4 14.04.2010 14:25
Thread Cpluser Общие вопросы .NET 6 30.03.2010 23:32
Проблемы с потоками... Deathwatcher Общие вопросы Delphi 5 20.04.2009 12:45