powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Шаблон класса для работы с потоком (WThread, Thread)
19 сообщений из 469, страница 19 из 19
Шаблон класса для работы с потоком (WThread, Thread)
    #39755865
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Freestyler,

Резюмирую, скрипач поток не нужен, по таймеру запускается упомянутый алгоритм, дизейблит пользовательскую кнопку, отрабатывает свое, енайблит кнопку, рестартует таймер до следующей итерации. При нажатии кнопки сходным образом дизейблиться/енайблиться таймер.
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39755870
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Freestyler,

вот без компонента:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
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.
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39755890
Freestyler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vlad F,

Спасибо.
в таком варианте будет блокировать работу приложения
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39755891
Freestyler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock,

Спасибо за пример!
+- такой вариант работает сейчас. была мысль переложить доп. потоки на компонент.
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39755900
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Freestylerв таком варианте будет блокировать работу приложения
А я тебя переспросил, и ты сказал что приложение все равно ждет окончания обработки.
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39755901
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Freestyler+- такой вариант работает сейчас. была мысль переложить доп. потоки на компонент.
Больше компонентов, хороших и разных!!))
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39755926
Freestyler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vlad F,

безусловно автору спасибо за компонент!
хотелось попробовать применить в проекте.
задача думаю типовая для многих - периодически что-то делать (подтягивать) в фоне
при этом чтобы была возможность пользователю это сделать явно
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39756390
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreestylerДобрый день!

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

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

требуется ли внешний таймер?
Можно. Достаточно метода Task WaitMS и проверки флага Terminated перед запуском задачи.
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39756398
Freestyler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman,

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure Task_1_Execute;
begin
  repeat
    WaitMS 
    if Terminated then
      Exit;

    // run SP
  until not Terminated;
end;



как тогда лучше сделать принудительный запуск (по кнопке) ?
просто проверить если задача не завершена то не делать?
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39756953
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Freestyler,

подумав на трезвую голову я-бы все таки сделал с таймером, но который запускает задачу в потоке. Плюс кнопка, которая запускает задачу и сбрасывает таймер. Так проще.
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39771444
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отсюда

Докдемок в комплекте OPM нету что ли?
а, нет, вижу. Правда у меня только SimpleDemo запустилось без установки доп.компонент.

Кстати, если трижды нажать на DemoTimer, то получим отлуп

Код: pascal
1.
2.
3.
4.
5.
Project WCThreadDemo raised exception class 'Exception' with message:
TaskDemoTimer cannot start while destroying.

 In file 'wcthread.pas' at line 654:
raise Exception.CreateFmt('%s cannot start while destroying.', [Name]);



По-моему, я тебе про это уже говорил.
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39771446
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док Отсюда

Докдемок в комплекте OPM нету что ли?
а, нет, вижу. Правда у меня только SimpleDemo запустилось без установки доп.компонент.

Кстати, если трижды нажать на DemoTimer, то получим отлуп

Код: pascal
1.
2.
3.
4.
5.
Project WCThreadDemo raised exception class 'Exception' with message:
TaskDemoTimer cannot start while destroying.

 In file 'wcthread.pas' at line 654:
raise Exception.CreateFmt('%s cannot start while destroying.', [Name]);




По-моему, я тебе про это уже говорил.
Много кто говорил. Там системный слип для имитации тяжелой работы. Нужно заменить самой работой с проверкой терминатора задачи/потока.
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39845666
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Поднял старый проект, который использовал wthread
странно он как-то работает.

Запустил simpledemo из комплекта wthread
И оказалось, что он задачи выполняет последовательно, а не параллельно.

Наверное, в чём-то есть замес ?
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39845670
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorИ оказалось, что он задачи выполняет последовательно, а не параллельно.
Один компонент = один поток. Задача = сообщение, сообщения обрабатываются в порядке очереди.
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39845675
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
wadmandefecatorИ оказалось, что он задачи выполняет последовательно, а не параллельно.
Один компонент = один поток. Задача = сообщение, сообщения обрабатываются в порядке очереди.

что-то я такое подозревал.
руки тому оторвать, кто писал прогу с одним компонентом
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39845699
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorруки тому оторвать, кто писал прогу с одним компонентом
"... от Питера до Москвы..." ©
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39845740
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,

Мих, ты всегда был тру-программистом. WThread, имхо, достаточно унифицированный компонент для быстрого решения шаблонной задачи. Зачем тебе он? :)
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39845749
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докdefecator,

Мих, ты всегда был тру-программистом. WThread, имхо, достаточно унифицированный компонент для быстрого решения шаблонной задачи. Зачем тебе он? :)

авторПоднял старый проект , который использовал wthread

видимо так было не всегда )
...
Рейтинг: 0 / 0
Шаблон класса для работы с потоком (WThread, Thread)
    #39845776
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Докdefecator,

Мих, ты всегда был тру-программистом. WThread, имхо, достаточно унифицированный компонент для быстрого решения шаблонной задачи. Зачем тебе он? :)

попросили проект поглядеть, который не работает так, как надо
А там я обнаружил, что используется wthread

полез изучать демки, чтобы понять, что не так.
...
Рейтинг: 0 / 0
19 сообщений из 469, страница 19 из 19
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Шаблон класса для работы с потоком (WThread, Thread)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]