Вверх ↑
Этот топик читают: Гость
Ответов: 22
Рейтинг: 0
#1: 2021-12-29 11:54:44 ЛС | профиль | цитата
Добрый день!
Не пойму, почему событие DoQuit, которое на хабе первое, срабатывает после окончания цикла?


Add(MainForm,2953706,805,126)
{
Width=462
Height=204
Position=1
Point(Handle)
}
Add(Button,4478059,658,231)
{
Left=75
Top=55
Caption="Punk"
link(onClick,636987:doEvent1,[])
}
Add(For,16628594,805,259)
{
End=30
link(onEvent,9010062:doEvent1,[])
}
Add(Label,3354496,805,329)
{
Left=140
Top=80
link(Text,16628594:Position,[])
}
Add(Label,3982908,1029,259)
{
Left=140
Top=60
}
Add(Hub,9010062,882,259)
{
link(onEvent1,5674486:doPing,[])
link(onEvent2,3354496:doText,[(908,272)(908,309)(787,309)(787,335)])
}
Add(Ping,5674486,952,259)
{
Name="ya.ru"
link(onFind,3982908:doText,[])
}
Add(Hub,636987,735,231)
{
OutCount=5
link(onEvent1,13673197:doQuit,[])
link(onEvent5,16628594:doFor,[])
}
Add(WinTools,13673197,805,203)
{
Point(doQuit)
link(Handle,2953706:Handle,[])
}

карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 8752
Рейтинг: 807
#2: 2021-12-29 12:07:50 ЛС | профиль | цитата
sansey73, окно не закрывается, пока не будут выполнена ВСЯ очередь событий инициируемых вашим хабом.
карма: 18

0
Ответов: 22
Рейтинг: 0
#3: 2021-12-29 12:18:41 ЛС | профиль | цитата
Вот же`ж!
Вообще задача, чтобы приложение безусловно закрылось по окончании некоего таймаута, несмотря на то, успело ли оно выполнить все задачи.
На этом эксперименте хотел отработать задумку. Может у кого есть идеи, как этого добиться?
карма: 0

0
Ответов: 8752
Рейтинг: 807
#4: 2021-12-29 13:25:16 ЛС | профиль | цитата
sansey73, а просто:
??


Add(MainForm,4614165,462,133)
{
Width=462
Height=204
Position=1
Point(Handle)
}
Add(Button,4478059,350,203)
{
Left=75
Top=55
Caption="Punk"
link(onClick,636987:doEvent1,[])
}
Add(For,16628594,427,231)
{
End=30
link(onEvent,9010062:doEvent1,[])
}
Add(Label,3354496,427,280)
{
Left=140
Top=80
link(Text,16628594:Position,[])
}
Add(Label,3982908,553,231)
{
Left=140
Top=60
}
Add(Hub,9010062,476,231)
{
link(onEvent1,5674486:doPing,[])
link(onEvent2,3354496:doText,[(501,244)(501,272)(417,272)(417,286)])
}
Add(Ping,5674486,511,231)
{
Name="ya.ru"
link(onFind,3982908:doText,[])
}
Add(Hub,636987,399,203)
{
OutCount=5
link(onEvent1,4614165:doClose,[(424,209)(424,160)])
link(onEvent5,16628594:doFor,[])
}
Add(WinTools,13673197,462,175)
{
Point(doQuit)
link(Handle,4614165:Handle,[])
}

карма: 18

0
Разработчик
Ответов: 25999
Рейтинг: 2104
#5: 2021-12-29 13:40:08 ЛС | профиль | цитата
Леонид писал(а):
а просто

А не поможет. Хоть сообщение WM_CLOSE и подается асинхронно через SendMessage (в отличие от WM_QUIT, поданное синхронно через PostMessage в конец очереди), но пока управление не будет передано системе, это сообщение не будет отработано, тк WM_ClOSE поставится после выполнения всех событий хаба. Вы когда-нибудь наблюдали как система останавливает зависшие приложения, и это происходит далеко не мгновенно.

Редактировалось 2 раз(а), последний 2021-12-29 13:48:26
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
Ответов: 5041
Рейтинг: 564
#6: 2021-12-29 13:48:54 ЛС | профиль | цитата
ещё проще и надёжней

Add(MainForm,2953706,70,63)
{
}
Add(InlineCode,9291942,147,119)
{
WorkPoints=#7:doClose|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|49: procedure doClose(var dt: TData; idx: word);|0:|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.doClose;|5:begin|7: Halt;|4:end;|0:|4:end.|
}
Add(Timer,1855399,70,119)
{
Interval=5000
link(onTimer,9291942:doClose,[])
}

карма: 5
0
Разработчик
Ответов: 25999
Рейтинг: 2104
#7: 2021-12-29 13:50:39 ЛС | профиль | цитата
andrestudio писал(а):
ещё проще и надёжней

Да, через Halt этот вопрос можно решить, тк Halt подается в той же очереди событий и не является оконным сообщением. Но схема TC бессмысленная, как таковая. В реальной схеме все это может и не работать, тк невозможно будет отследить все последовательности сообщений.

Редактировалось 2 раз(а), последний 2021-12-29 13:55:23
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
Ответов: 22
Рейтинг: 0
#8: 2021-12-29 13:57:17 ЛС | профиль | цитата
andrestudio, Супер! Спасибо!
карма: 0

0
Разработчик
Ответов: 25999
Рейтинг: 2104
#9: 2021-12-29 13:58:38 ЛС | профиль | цитата
sansey73 писал(а):
Супер! Спасибо!

Ну расскажи потом, будет ли это все работать как надо.
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
Ответов: 22
Рейтинг: 0
#10: 2021-12-30 12:44:24 ЛС | профиль | цитата
Ну это будет совсем "потом", пока с рабочей сети соберу статистику. А на стенде работает, как надо.
карма: 0

0
Разработчик
Ответов: 25999
Рейтинг: 2104
#11: 2021-12-30 12:47:56 ЛС | профиль | цитата
sansey73 писал(а):
Ну это будет совсем "потом", пока с рабочей сети соберу статистику. А на стенде работает, как надо.

Успехов в реализации.
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
11
Сообщение
...
Прикрепленные файлы
(файлы не залиты)