powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как организовать ожидание пока Thread не отработает задание
25 сообщений из 78, страница 2 из 4
Как организовать ожидание пока Thread не отработает задание
    #39643288
stanilar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдА что случится, если в этот момент я закрою окно?

Это зависит от наличия программиста на проекте.

Код: pascal
1.
2.
3.
4.
5.
6.
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  repeat
    Application.ProcessMesagess();
  until Флаг ;
end;
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643290
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

не надо ничего регистрировать, уже все готовое есть - AllocateHWnd и цикл стандартный выборки из очереди сообщений
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643293
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zeliuskealon(Ruslan),

не надо ничего регистрировать, уже все готовое есть - AllocateHWnd и цикл стандартный выборки из очереди сообщенийт.е. то что она не threadsafe вас никак не смущает?
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643307
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

есть такая фигня, да, но не смущает, я ею часто пользуюсь, небезопасность легко обходится вызовом в главном потоке перед созданием доп потока
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643309
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zeliusнебезопасность легко обходится вызовом в главном потоке перед созданием доп потока
Как же оно тогда, окошко бедное, будет работать через цикл сообщения доп. потока?
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643332
Идиотизм использовать несколько потоков,что бы в этих потоках ждать выполнения запущенного потока.

Тогда и одного потока с головой хватит, написав код линейно
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643334
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockZeliusнебезопасность легко обходится вызовом в главном потоке перед созданием доп потока
Как же оно тогда, окошко бедное, будет работать через цикл сообщения доп. потока?
нее, вызвать в главном, а потом в дополнительном спокойно вызывать
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643345
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zeliusнее, вызвать в главном, а потом в дополнительном спокойно вызыватьMakeObjectInstance тоже не threadsafe, шикарно будет когда на массовом проекте встретите ещё такого же оптимизатора
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643346
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МиксионисюниИдиотизм использовать несколько потоков,что бы в этих потоках ждать выполнения запущенного потока.

Тогда и одного потока с головой хватит, написав код линейноабсолютно согласен, осталось только микрософт убедить подправить пару мелочей
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643349
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
44.
45.
46.
47.
48.
49.
50.
51.
procedure Thread1.Execute;
var
  Res: Cardinal;
  Handles: array[0..0] of THandle;
begin
  .............
  Handles[0] := TermanateEvent;
  while not Terminated do begin
    Res := MsgWaitForMultipleObjects(1, @Handles[0], False, INFINITE, QS_ALLPOSTMESSAGE);
    case Res of
      WAIT_OBJECT_0: Terminate;
      WAIT_OBJECT_0 + 1: DoPeekMessages;
  end;
end;

procedure TThread1.DoPeekMessages;
var
  LMsg: TMsg;
begin
  while PeekMessage(LMsg, 0, 0, 0, PM_REMOVE) do
    DoMessage(LMsg);
end;

procedure TThread1.DoMessage(const AMsg: TMsg);
var
  LMsg: TMessage;
begin
  LMsg.Msg := AMsg.message;
  LMsg.WParam := AMsg.wParam;
  LMsg.LParam := AMsg.lParam;
  LMsg.Result := 0;
  Dispatch(LMsg);
end;

procedure TThread1.TMMyMsg(var AMsg: TMessage);
begin
  DoProcess(Pointer(AMsg.WParam));
  SetEvent(AMsg.LParam);
end;

procedure Thread2.Execute;
var
  WaitEvent: THandle;
begin
  WaitEvent := CreateEvent(nil, False, False, nil);
  ............
  PostThreadMessage(Thread1.ThreadID, TM_MY_MSG, WPARAM(@Data), WaitEvent);
  WaitForSingleObject(WaitEvent, INFINITE);
  ............
  CloseHandle(WaitEvent);
end;
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643369
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

с PostThreadMessage те же прелести что и с SendMessage 21402607 , и обходной функции нет
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643396
Thread
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за обсуждение
Я здесь, никуда не делся.
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643463
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МиксионисюниИдиотизм использовать несколько потоков,что бы в этих потоках ждать выполнения запущенного потока.

Тогда и одного потока с головой хватит, написав код линейноНе идиотизм, если нужна очередь - строго последовательное исполнение заданий, полученных из разных потоков.
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643464
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZeliusYuRockпропущено...

Как же оно тогда, окошко бедное, будет работать через цикл сообщения доп. потока?
нее, вызвать в главном, а потом в дополнительном спокойно вызыватьЧто вызывать? Если ты сделал CreateWindow в главном потоке, то это окно будет "принажлежать" главному потоку, и сообщения ему будут в нем приходить только.
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643465
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockМиксионисюниИдиотизм использовать несколько потоков,что бы в этих потоках ждать выполнения запущенного потока.

Тогда и одного потока с головой хватит, написав код линейноНе идиотизм, если нужна очередь - строго последовательное исполнение заданий, полученных из разных потоков.
Тебе о другом говорят: отправляешь задание и ждешь результатов - чем лучше ожидание результата по сравнению с (например) просто вызовом нужной функции прямо в контексте данного треда?
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643466
YuRock,



Пояснение, у нас есть уже поток, вместо того что бы вызывать новые потоки, мы можем вызывать функции



Я уже чувствую как твои идеалы рушатся на корню.


чччД слишком заумно высказал
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643472
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДYuRockпропущено...
Не идиотизм, если нужна очередь - строго последовательное исполнение заданий, полученных из разных потоков.
Тебе о другом говорят: отправляешь задание и ждешь результатов - чем лучше ожидание результата по сравнению с (например) просто вызовом нужной функции прямо в контексте данного треда?Ничем только в случае, если это задание выполняется изолированно. А если это команда на устройство на открытом компорте? Нужна и очередь, и ожидание исполнения.
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643474
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МиксионисюниЯ уже чувствую как твои идеалы рушатся на корню.


чччД слишком заумно высказалчччД правильно сказал, только ты не понял, что он сказал об общем (и частном в то же время) случае. Да, бывает, такое бессмысленно, и конечно можно просто вызвать функцию. А бывает - что жругого выхода нет и нвдо ждать окончания задания именно в другом потоке (который обрабатывает очередь).
Думаю, именно эта задача у ТС - активыксы какие-то создаются, видимо, для работы с устройствами.
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643478
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockМиксионисюниИдиотизм использовать несколько потоков,что бы в этих потоках ждать выполнения запущенного потока.

Тогда и одного потока с головой хватит, написав код линейноНе идиотизм, если нужна очередь - строго последовательное исполнение заданий, полученных из разных потоков.для этого достаточно критической секции


YuRockZeliusпропущено...

нее, вызвать в главном, а потом в дополнительном спокойно вызыватьЧто вызывать? Если ты сделал CreateWindow в главном потоке, то это окно будет "принажлежать" главному потоку, и сообщения ему будут в нем приходить только.
я так понял, что он имел ввиду что там ленивая инициализация и достаточно один раз предварительно запустить, но это не так, дело портит MakeObjectInstance
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643479
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)для этого достаточно критической секцииНу правильно. Одной критической секции достаточно для организации элементарной очереди. Без всяких виндовых SendMessage, IOCP и проч.
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643480
stanilar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МиксионисюниТогда и одного потока с головой хватит, написав код линейно

Линейный код сложно разделить на модули.

Именно тот случай, когда ощущается отсталость Дельфи. В данном случае в виде малого количества компонент для реактивного программирования.
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643482
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stanilar,

Спасибо, поржал перед сном
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643488
на самом то деле, задача выглядит так

1) Создание всех ком объектов
2) Создание цикла - который будет ждать некий конечный статус, а пока его нет - выполнятся бесконечно
3) Делать проверку ту самую (Которую хотели вынести в отдельный поток, и поток первый ждал бы пока второй поток отработает, и вернёт эту метку на проверку)
4) В проверке делать что хотелось
5) После получения метки конца главного цикла, после цикла уничтожить созданные ком объекты - избавить код от постоянном пересоздание и удалении.



stanilar ,

Ржу не могу)
Модули = функции.
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643489
stanilar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МиксионисюниМодули = функции

А меня учили что в Дельфи для модульности используются Unit'ы.

МиксионисюниРжу не могу)

Грех смеяться над отсталыми.
...
Рейтинг: 0 / 0
Как организовать ожидание пока Thread не отработает задание
    #39643558
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stanilarМиксионисюниТогда и одного потока с головой хватит, написав код линейно

Линейный код сложно разделить на модули.

Именно тот случай, когда ощущается отсталость Дельфи. В данном случае в виде малого количества компонент для реактивного программирования.

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


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