Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 10 11 12 13 14 15 16 17 18 [19]
 Re: Шаблон класса для работы с потоком (WThread, Thread)  [new]
Vlad F
Member

Откуда:
Сообщений: 480
Freestyler,

Резюмирую, скрипач поток не нужен, по таймеру запускается упомянутый алгоритм, дизейблит пользовательскую кнопку, отрабатывает свое, енайблит кнопку, рестартует таймер до следующей итерации. При нажатии кнопки сходным образом дизейблиться/енайблиться таймер.
4 янв 19, 14:55    [21778396]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон класса для работы с потоком (WThread, Thread)  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3707
Freestyler,

вот без компонента:
+
type
  TRunSPThread = class( TThread )
  private
    FWaitEvent: TSimpleEvent;
  protected
    procedure Execute; override;
  public
    constructor Create;
    destructor Destroy; override;

    procedure WakeUp;
  end;

constructor TRunSPThread.Create;
begin
  inherited Create( False );
  FWaitEvent := TSimpleEvent.Create;
end;

destructor TRunSPThread.Destroy;
begin
  Terminate;
  FWaitEvent.SetEvent;
  inherited Destroy;
  FWaitEvent.Free;
end;

procedure TRunSPThread.Execute;
begin
  repeat
    FWaitEvent.ResetEvent;
    FWaitEvent.WaitFor( 10 * 60 * 1000 );
    if Terminated then
      Exit;

    // run SP
  until not Terminated;
end;

procedure TRunSPThread.WakeUp;
begin
  FWaitEvent.SetEvent;
end;

"если пользователь нажал кнопку" - то вызываем WakeUp.

Freestyler
нужно дождаться завершения обработки и по ее результатам или повторный запуск или обработка не требуется

Это уже навороты, делай сам. Например, нужен дополнительный Event, которого ждать в начале WakeUp.
4 янв 19, 15:04    [21778401]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон класса для работы с потоком (WThread, Thread)  [new]
Freestyler
Member

Откуда:
Сообщений: 66
Vlad F,

Спасибо.
в таком варианте будет блокировать работу приложения
4 янв 19, 16:31    [21778442]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон класса для работы с потоком (WThread, Thread)  [new]
Freestyler
Member

Откуда:
Сообщений: 66
YuRock,

Спасибо за пример!
+- такой вариант работает сейчас. была мысль переложить доп. потоки на компонент.
4 янв 19, 16:33    [21778443]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон класса для работы с потоком (WThread, Thread)  [new]
Vlad F
Member

Откуда:
Сообщений: 480
Freestyler
в таком варианте будет блокировать работу приложения

А я тебя переспросил, и ты сказал что приложение все равно ждет окончания обработки.
4 янв 19, 16:54    [21778461]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон класса для работы с потоком (WThread, Thread)  [new]
Vlad F
Member

Откуда:
Сообщений: 480
Freestyler
+- такой вариант работает сейчас. была мысль переложить доп. потоки на компонент.

Больше компонентов, хороших и разных!!))
4 янв 19, 16:56    [21778464]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон класса для работы с потоком (WThread, Thread)  [new]
Freestyler
Member

Откуда:
Сообщений: 66
Vlad F,

безусловно автору спасибо за компонент!
хотелось попробовать применить в проекте.
задача думаю типовая для многих - периодически что-то делать (подтягивать) в фоне
при этом чтобы была возможность пользователю это сделать явно
4 янв 19, 18:43    [21778506]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон класса для работы с потоком (WThread, Thread)  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24745
Freestyler
Добрый день!

подскажите как можно реализовать с помощью компонента такой порядок работы:

обработка выполняется в потоке с периодичностью (например 10 минут)
при этом пользователь может по кнопке принудительно запустить эту же обработку.

требуется ли внешний таймер?

Можно. Достаточно метода Task WaitMS и проверки флага Terminated перед запуском задачи.
6 янв 19, 20:04    [21779217]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон класса для работы с потоком (WThread, Thread)  [new]
Freestyler
Member

Откуда:
Сообщений: 66
wadman,

то есть процедура вида

procedure Task_1_Execute;
begin
  repeat
    WaitMS 
    if Terminated then
      Exit;

    // run SP
  until not Terminated;
end;


как тогда лучше сделать принудительный запуск (по кнопке) ?
просто проверить если задача не завершена то не делать?
6 янв 19, 20:36    [21779226]     Ответить | Цитировать Сообщить модератору
 Re: Шаблон класса для работы с потоком (WThread, Thread)  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24745
Freestyler,

подумав на трезвую голову я-бы все таки сделал с таймером, но который запускает задачу в потоке. Плюс кнопка, которая запускает задачу и сбрасывает таймер. Так проще.
9 янв 19, 08:18    [21780235]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 10 11 12 13 14 15 16 17 18 [19]
Все форумы / Delphi Ответить