Вверх ↑
Этот топик читают: Гость
Ответов: 1841
Рейтинг: 369
#1: 2009-11-17 12:40:22 ЛС | профиль | цитата
Как можно приостановить выполняемое событие?
На пример у главной формы включим точку onClose и также создадим сообщение после соединим точку onClose с точкой doMessage и после компиляции попробуем закрыть главную форму то получим перед закрытием главной формы сообщение и аш после закрытия сообщения главная форма закроется...
Вопрос в следующем: есть ли такой компонент который мог бы приостановить поток на определённое время?
Сразу говорю что компонент Sleep не подходит так как он замораживает всю прогу а мне нужно чтобы только определённые события приостанавливались как происходит это при появлении сообщения перед закрытием формы пример которой я описал выше но без самого сообщения.
Пример:
code_15693.txt

PS. Схема выше приведена просто для примера и писать мне способы приостановки закрытия формы связанные с точкой Close не надо...
карма: 1
0
файлы: 1code_15693.txt [429B] [106]
Администрация
Ответов: 15295
Рейтинг: 1519
#2: 2009-11-17 12:55:53 ЛС | профиль | цитата
Timer
AutoStop = 1
карма: 27
0
Ответов: 1841
Рейтинг: 369
#3: 2009-11-17 13:26:15 ЛС | профиль | цитата
не, я имел ввиду приостановление например события onClose без остановки всей программы...
карма: 1
0
Ответов: 4641
Рейтинг: 334
#4: 2009-11-17 13:35:45 ЛС | профиль | цитата
CriDos писал(а):
не, я имел ввиду приостановление например события onClose без остановки всей программы...

давай конкретнее на примере. Ни как не пойму чего надо. Таймер тебе не подходит..тогда что! Может просто пользоваться правильно таймером не умеешь?
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Администрация
Ответов: 15295
Рейтинг: 1519
#5: 2009-11-17 14:39:39 ЛС | профиль | цитата
CriDos писал(а):
не, я имел ввиду приостановление например события onClose без остановки всей программы...

оконные сообщения, коим и является WM_CLOSE обрабатываются основным потоком программы. Отсюда простой вывод - задержать обработку сообщения без остановки всего потока не возможно впринципе.
карма: 27
0
Ответов: 1841
Рейтинг: 369
#6: 2009-11-17 14:51:58 ЛС | профиль | цитата
Ravilr, смотри: Точка onClose на главной форме вызывает событие при закрытии формы и пока это событие не будет выполнено форма не закроется.
При соединении точки главной формы onClose к точке doMessage элемента Message и потом скомпилировав проект попробуем закрыть программу и при попытки закрыть программу получим сообщение и пока мы не нажмём на ОК программа будет работать!
Можно ли сделать такой же эфект приостановки события в данном случае точки onClose как это происходит в описанном выше случае но только без элемента Message?
------------ Дoбавленo в 14.54:
Dilma, опередил...
Ясно.
карма: 1
0
Ответов: 2125
Рейтинг: 159
#7: 2009-11-17 15:15:56 ЛС | профиль | цитата
Так что-ли:
Add(MainForm,2953706,210,168)
{
Caption="Close Me"
Point(Close)
link(Close,15490348:GetData,[])
}
Add(EventFromData,15490348,210,112)
{
link(onEvent,3225782:doMessage,[])
}
Add(DoData,10262376,161,112)
{
Data=Integer(0)
link(onEventData,15490348:doData,[])
}
Add(Message,3225782,266,112)
{
Message="Your message"
link(onMessage,10262376:doData,[(313,118)(313,98)(149,98)(149,118)])
}
Add(Timer,4917123,147,231)
{
Interval=300
link(onTimer,4857651:doNext,[])
}
Add(Label,8497627,266,231)
{
Left=90
Top=35
}
Add(Counter,4857651,203,231)
{
link(onNext,8497627:doText,[])
}
карма: 1

0
Разработчик
Ответов: 26160
Рейтинг: 2127
#8: 2009-11-17 15:26:42 ЛС | профиль | цитата
Можно еще и так приостанвить работу для любого участка схемы, если я, конечно, правильно понял задачу



Add(MainForm,2953706,168,91)
{
link(onCreate,6738993:doStart,[(222,111)(222,132)])
}
Add(MutexThread,6738993,245,126)
{
Delay=300
Point(doSuspend)
Point(doResume)
Point(onSuspend)
Point(onResume)
link(onExec,8176046:doChangeValue,[(291,132)(291,97)])
link(onSuspend,13880302:doTimer,[])
}
Add(Button,6765158,168,140)
{
Left=15
Top=35
Width=110
TabOrder=-1
Caption="Приостановить"
link(onClick,6738993:doSuspend,[])
}
Add(LED,8176046,301,91)
{
Left=140
Top=35
ColorBlick=255
}
Add(Message,6152312,350,140)
{
Message="Поток приостановлен"
Caption=":: Инфо ::"
Point(onOK)
link(onOK,6738993:doResume,[(402,153)(402,190)(233,190)(233,153)])
}
Add(Timer,13880302,301,140)
{
Interval=0
Enable=1
AutoStop=1
link(onTimer,6152312:doMessage,[])
}

карма: 22

0
Ответов: 2125
Рейтинг: 159
#9: 2009-11-17 15:32:08 ЛС | профиль | цитата
Или даже так:

Add(MainForm,191486,280,252)
{
Caption="Close Me"
Point(Close)
link(Close,13267116:GetData,[])
}
Add(Timer,4917123,217,350)
{
Interval=300
link(onTimer,4857651:doNext,[])
}
Add(Label,8497627,329,350)
{
Left=90
Top=35
}
Add(Counter,4857651,273,350)
{
link(onNext,8497627:doText,[])
}
Add(Timer,15777626,385,203)
{
Interval=3000
Enable=1
link(onTimer,16018864:doEvent1,[])
}
Add(DoData,1390139,224,252)
{
Data=String(Waiting...)
link(onEventData,191486:doCaption,[])
}
Add(Memory,3568161,280,147)
{
Default=Integer(1)
}
Add(DoData,15721446,224,147)
{
Data=Integer(0)
link(onEventData,3568161:doValue,[])
}
Add(Hub,7002692,336,203)
{
OutCount=3
link(onEvent1,15777626:doTimer,[])
link(onEvent2,1390139:doData,[(363,216)(363,301)(212,301)(212,258)])
link(onEvent3,13267116:doData,[(371,223)(371,195)(267,195)(267,209)])
}
Add(Hub,16018864,441,203)
{
link(onEvent1,15721446:doData,[(468,209)(468,130)(212,130)(212,153)])
link(onEvent2,191486:doClose,[(468,216)(468,313)(268,313)(268,279)])
}
Add(EventFromData,13267116,280,203)
{
link(onEvent,7002692:doEvent1,[])
link(Data,3568161:Value,[])
}
карма: 1

0
Разработчик
Ответов: 26160
Рейтинг: 2127
#10: 2009-11-17 15:39:11 ЛС | профиль | цитата
tsdima, мне кажется, что он просил приостановить работу приложения
CriDos писал(а):
Можно ли сделать такой же эфект приостановки события

или я чего-то не втер
карма: 22

0
Ответов: 1841
Рейтинг: 369
#11: 2009-11-17 16:02:48 ЛС | профиль | цитата
nesco писал(а):
Можно еще и так приостанвить работу для любого участка схемы, если я, конечно, правильно понял задачу

nesco, правильно понял но после приостановки потока по идее форма не должна закрываться так как событие не выполнено до конца (как я думаю)
------------ Дoбавленo в 16.06:
nesco писал(а):
tsdima, мне кажется, что он просил приостановить работу приложения

на оборот, приложение должно также работать кроме события после которого будет приостановка потока (по времени или событию)...
карма: 1
0
Ответов: 2125
Рейтинг: 159
#12: 2009-11-17 16:10:31 ЛС | профиль | цитата
CriDos, тебе чего надо-то? Деактивировать форму, чтобы кнопки не нажимались и текст в поля ввода не вводился? Или задержку чего-то?
карма: 1

0
Ответов: 4630
Рейтинг: 749
#13: 2009-11-17 16:38:35 ЛС | профиль | цитата
Если речь идет про onClose - то можно использовать точку Close, чтобы разрешить или нет закрытие формы.
А для того чтобы приостановить любые другие события, то обычно это делается при каком-либо условии
(иначе зачем вообще подключать обработку этого события?), соответственно нужно просто проверить это условие и не реагировать на событие.
карма: 26

0
Разработчик
Ответов: 4698
Рейтинг: 426
#14: 2009-11-17 16:45:30 ЛС | профиль | цитата
CirDos, это что ли?
Add(MainForm,2953706,280,175){
Caption="1"
Point(Close)
link(Close,8499683:GetData,[])
}
Add(For,11075449,434,280)
{
End=100000
link(onEvent,1430613:doCalc,[])
}
Add(Thread,13641631,343,273)
{
link(onExec,2455841:doEvent1,[])
}
Add(EventFromData,8499683,280,126)
{
link(onEvent,304177:doWork2,[])
}
Add(Timer,8797383,287,273)
{
Interval=1
AutoStop=1
link(onTimer,13641631:doStart,[])
}
Add(Hub,2455841,392,273)
{
OutCount=3
link(onEvent1,8537621:doWork1,[])
link(onEvent2,11075449:doFor,[])
link(onEvent3,8537621:doWork2,[(425,293)(425,325)(521,325)(521,286)])
}
Add(MathParse,1430613,483,280)
{
MathStr="%1 + 2*%2*%2 + 10"
}
Add(Memory,1263726,581,273)
{
Default=Integer(1)
link(onData,2953706:doCaption,[(625,279)(625,230)(268,230)(268,181)])
}
Add(ChanelToIndex,8537621,532,273)
{
link(onIndex,1263726:doValue,[])
}
Add(If_else,1208969,378,133)
{
Op2=Integer(1)
link(onTrue,7879121:doWork1,[(423,139)(423,120)(219,120)(219,132)])
link(onFalse,304177:doWork3,[(424,146)(424,169)(319,169)])
link(Op1,1263726:Value,[(384,114)(569,114)(569,316)(587,316)])
}
Add(ChanelToIndex,7879121,231,126)
{
link(onIndex,8499683:doData,[])
}
Add(Message,10730321,329,126)
{
Message="Close"
Type=4
Point(onRETRY)
Point(onIGNORE)
link(onRETRY,1208969:doCompare,[])
link(onIGNORE,7879121:doWork2,[(373,146)(373,161)(220,161)(220,139)])
}
Add(HubEx,304177,315,126)
{
link(onEvent,10730321:doMessage,[])
}
карма: 10
0
Ответов: 4641
Рейтинг: 334
#15: 2009-11-17 17:20:20 ЛС | профиль | цитата
CriDos, честно не люблю заморочки. Я бы использовал точку doClose и не парился.
code_15700.txt
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 1code_15700.txt [491B] [147]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)