How do I get an application to generate a periodic event? I need
something to run once every 24 hours. |
Jerome,
> How do I get an application to generate a periodic event? I need > something to run once every 24 hours. This sounds like one of those Linux chron gizmos; I believe NT offers a way to do that kind of thing too, and you might want to build an app just for the purpose. With that said, I have Dolphin apps that run 7x24 on a few different machines. They usually do things on the scale of 10 to 30 minutes, but, I do have one task that occurs just after midnight each day. The 00:00 task is triggered by looking at the current date vs. the date it was last performed, and done (and the "flag" updated) when they don't match. It runs out of a background thread that does automated backups every 5(??) minutes. I routinely use 30 minute delays; I don't recall trying anything longer than that. Have a good one, Bill -- Wilhelm K. Schwab, Ph.D. [hidden email] |
In reply to this post by Jerome Chan
Hi Jerome,
"Jerome Chan" <[hidden email]> wrote in message news:[hidden email]... > How do I get an application to generate a periodic event? I need > something to run once every 24 hours. I've included a small implementation of such class, based on BlockingCallMonitor. I suppose no comments needed... Have a good one, Dmitry begin 666 SynchronizationServer.cls M(D9I;&5D(&]U="!F<F]M($1O;'!H:6X@4VUA;&QT86QK(#(P,# @<F5L96%S M92 T+C Q(B$-"@T*3V)J96-T('-U8F-L87-S.B C4WEN8VAR;VYI>F%T:6]N M4V5R=F5R#0H):6YS=&%N8V5687)I86)L94YA;65S.B G;6]N:71O<B!R=6Y" M;&]C:R!L87-T4G5N)PT*"6-L87-S5F%R:6%B;&5.86UE<SH@)T1E9F%U;'0G M#0H)<&]O;$1I8W1I;VYA<FEE<SH@)R<-"@EC;&%S<TEN<W1A;F-E5F%R:6%B M;&5.86UE<SH@)R<A#0I3>6YC:')O;FEZ871I;VY397)V97(@8V]M;65N=#H@ M)R<A#0H-"E-Y;F-H<F]N:7IA=&EO;E-E<G9E<B!G=6ED.B H1U5)1"!F<F]M M4W1R:6YG.B G>T,S,3E$,D4P+3@P,S$M,3%$-2U"03@Y+3 P,#A#-S@Y030R M-'TG*2$-"@T*(5-Y;F-H<F]N:7IA=&EO;E-E<G9E<B!C871E9V]R:65S1F]R M0VQA<W,A56YC;&%S<VEF:65D(2 A#0HA4WEN8VAR;VYI>F%T:6]N4V5R=F5R M(&UE=&AO9'-&;W(A#0H-"F-H96-K179E<GD-"@DB26X@<V5C;VYD<R(-"@T* M"5X@-C A#0H-"F-L;W-E#0H-"@EM;VYI=&]R(&YO=$YI;"!I9E1R=64Z(%L@ M;6]N:71O<B!T97)M:6YA=&4@72XA#0H-"F-O;7!L971I;VY";&]C:PT*#0H) M7B!;(#IC;VUM86YD('P-"@D)?"!C=7)R96YT('P-"@T*"0EC=7)R96YT(#H] M(%1I;653=&%M<"!C=7)R96YT+@T*"0DH8W5R<F5N=" M('-E;&8@;&%S=%)U M;BD@/B!S96QF('=A:71$=7)A=&EO;B!I9E1R=64Z(%L-"@D)"7-E;&8@<G5N M0FQO8VL@=F%L=64@:694<G5E.B!;(&QA<W12=6X@.CT@8W5R<F5N="!=#0H) M"5T-"@E=(0T*#0II;FET:6%L:7IE#0H)?"!E<G)O<DUE<W-A9V4@? T*#0H) M97)R;W)-97-S86=E(#H]("<@4WEN8VAR;VYI>F%T:6]N('-E<G9E<B!W:6QL M(&)E(&-L;W-E9"XG+@T*#0H);6]N:71O<B Z/2 H($)L;V-K:6YG0V%L;$UO M;FET;W(-"@D)8V%L;$)L;V-K.B!;("@@1&5L87D@9F]R4V5C;VYD<SH@<V5L M9B!C:&5C:T5V97)Y("D@=V%I="X@(W)U;B!=("D-"@D)8V]M<&QE=&EO;D)L M;V-K.B!S96QF(&-O;7!L971I;VY";&]C:SL-"@D)97)R;W)";&]C:SH@6R Z M97)R;W(@?"!E<G)O<B!S:6=N86PZ(&5R<F]R(&1I<W!L87E3=')I;F<L(&5R M<F]R365S<V%G92X@<V5L9B!C;&]S92!=.PT*"0EM;VYI=&]R.PT*"0EY;W5R M<V5L9B$-"@T*;&%S=%)U;@T*#0H);&%S=%)U;B!I<TYI;"!I9E1R=64Z(%L@ M;&%S=%)U;B Z/2!4:6UE4W1A;7 @8W5R<F5N="!=+@T*"5X@;&%S=%)U;@DA M#0H-"G)U;D)L;V-K#0H-"@ER=6Y";&]C:R!I<TYI;"!I9E1R=64Z(%L)<G5N M0FQO8VL@.CT@6R!T<G5E(%T@(%TN#0H)7B!R=6Y";&]C:R$-"@T*<G5N0FQO M8VLZ(&%.:6QA9&EC0FQO8VL-"@T*"7)U;D)L;V-K(#H](&%.:6QA9&EC0FQO M8VLA#0H-"G=A:71$=7)A=&EO;@T*"2));B!S96-O;F1S(@T*#0H)7B Q.# P M(2 A#0HA4WEN8VAR;VYI>F%T:6]N4V5R=F5R(&-A=&5G;W)I97-&;W(Z("-C M:&5C:T5V97)Y(6-O;G-T86YT<R%P<FEV871E(2 A#0HA4WEN8VAR;VYI>F%T M:6]N4V5R=F5R(&-A=&5G;W)I97-&;W(Z("-C;&]S92%P<FEV871E(7)E86QI M>FEN9R]U;G)E86QI>FEN9R$@(0T*(5-Y;F-H<F]N:7IA=&EO;E-E<G9E<B!C M871E9V]R:65S1F]R.B C8V]M<&QE=&EO;D)L;V-K(6%C8V5S<VEN9R%P<FEV M871E(2 A#0HA4WEN8VAR;VYI>F%T:6]N4V5R=F5R(&-A=&5G;W)I97-&;W(Z M("-I;FET:6%L:7IE(6EN:71I86QI>FEN9R%P<FEV871E(2 A#0HA4WEN8VAR M;VYI>F%T:6]N4V5R=F5R(&-A=&5G;W)I97-&;W(Z("-L87-T4G5N(2HM=6YC M;&%S<VEF:65D(7!R:79A=&4A("$-"B%3>6YC:')O;FEZ871I;VY397)V97(@ M8V%T96=O<FEE<T9O<CH@(W)U;D)L;V-K(6EN:71I86QI>FEN9R%P<FEV871E M(2 A#0HA4WEN8VAR;VYI>F%T:6]N4V5R=F5R(&-A=&5G;W)I97-&;W(Z("-R M=6Y";&]C:SHA86-C97-S:6YG(7!R:79A=&4A("$-"B%3>6YC:')O;FEZ871I M;VY397)V97(@8V%T96=O<FEE<T9O<CH@(W=A:71$=7)A=&EO;B%C;VYS=&%N M=',A<')I=F%T92$@(0T*#0HA4WEN8VAR;VYI>F%T:6]N4V5R=F5R(&-L87-S M(&UE=&AO9'-&;W(A#0H-"F-L;W-E#0H-"@ES96QF(&1E9F%U;'0@8VQO<V4A M#0H-"F1E9F%U;'0-"@T*"41E9F%U;'0@:7-.:6P@:694<G5E.B!;($1E9F%U M;'0@.CT@<W5P97(@;F5W(%TN#0H)7B!$969A=6QT(0T*#0IN97<-"@ES96QF M('-H;W5L9$YO=$EM<&QE;65N="$-"@T*<G5N0FQO8VLZ(&%.:6QA9&EC0FQO M8VL-"@T*"5X@<V5L9B!D969A=6QT#0H)"6-L;W-E.PT*"0ER=6Y";&]C:SH@ M84YI;&%D:6-";&]C:SL-"@D):6YI=&EA;&EZ93L-"@D)>6]U<G-E;&8A("$- M"B%3>6YC:')O;FEZ871I;VY397)V97(@8VQA<W,@8V%T96=O<FEE<T9O<CH@ M(V-L;W-E(6]P97)A=&EO;G,A<'5B;&EC(2 A#0HA4WEN8VAR;VYI>F%T:6]N M4V5R=F5R(&-L87-S(&-A=&5G;W)I97-&;W(Z("-D969A=6QT(6EN<W1A;F-E M(&-R96%T:6]N(7!R:79A=&4A("$-"B%3>6YC:')O;FEZ871I;VY397)V97(@ M8VQA<W,@8V%T96=O<FEE<T9O<CH@(VYE=R$J+7-H;W5L9"!N;W0@:6UP;&5M M96YT(6EN<W1A;F-E(&-R96%T:6]N(7!R:79A=&4A("$-"B%3>6YC:')O;FEZ M871I;VY397)V97(@8VQA<W,@8V%T96=O<FEE<T9O<CH@(W)U;D)L;V-K.B$J ;+75N8VQA<W-I9FEE9"%P=6)L:6,A("$-"@T* ` end |
In reply to this post by Jerome Chan
> How do I get an application to generate a periodic event? I need
> something to run once every 24 hours. If the image runs 24x7 and it's just one event every 24 hours try a fork with a sleep as Bill suggests: AnObject>> initialize [Processor sleep: (60 * 60 * 24 * 1000). self whatever] fork. The TimeStamp classes contain date arithmetic so you can calculate the proper millisecond delay from the current time of day. You might have to deal with problems of larger durations and multiprocessing. In Windows and/or VB there is limit on the size of these delay durations -- I think it's a 16 bit unsigned integer. If Dolphin doesn't wrapper that you'll have to put it into a loop of smaller naps spanning your 24 hour sleep: [1 to: (60 * 24) do: [:i | Processor sleep 60 * 1000]. self whatever] fork This fork has a side effect of sending the message from process other than the user interface, which posess the usual problems of synchronizing critical regions. If you have no user interface this is no problem. If you do, and there is any chance your enduser is something when the clock strikces 24:00, synchronize the critical region using Semaphore. Just curious, what what kind of application are you building? I have to do realtime delay stuff in a voice server application and am exploring Dolphin as a solution. -Alan |
Alan Wostenberg
> [1 to: (60 * 24) do: [:i | Processor sleep 60 * 1000]. self whatever] > fork > > This fork has a side effect of sending the message from process other > than the user interface, which posess the usual problems of > synchronizing critical regions. If you have no user interface this is > no problem. If you do, and there is any chance your enduser is > something when the clock strikces 24:00, synchronize the critical > region using Semaphore. You can, and possibly should, arrange for code to be executed in the main UI thread (at the next idle time) by using: SessionManager inputState queueDeferredAction: [...code...]. Depending on your app this may be any of: Necessary -- if you are changing UI elements while a user may be doing something; the UI framework is (by design, correctly IMO) not inherently threadsafe. Desirable -- if it means you can get away without additional explicit synchronisation. Pointless -- e.g. if your app has no UI (or the timer never affects the UI) and is fully threadsafe, or if it never does anything *except* in response to the timer going off (and it doesn't matter if the timer does go off while the app is shutting down). > -Alan -- chris |
In article <[hidden email]>,
"Chris Uppal" <[hidden email]> wrote: > You can, and possibly should, arrange for code to be executed in the main UI > thread (at the next idle time) by using: > > SessionManager inputState queueDeferredAction: [...code...]. This is the method that I use but I sometimes get a message not understood exception even when the classes involve have them defined! |
Jerome,
> > SessionManager inputState queueDeferredAction: [...code...]. > > This is the method that I use but I sometimes get a message not > understood exception even when the classes involve have them defined! Odd! I've never seen anything like this at all. Do you mean that you got a walkback, and were able to confirm that the message really was being sent to an object of the class you expected ? -- chris |
In article <[hidden email]>,
"Chris Uppal" <[hidden email]> wrote: > Jerome, > > > > SessionManager inputState queueDeferredAction: [...code...]. > > > > This is the method that I use but I sometimes get a message not > > understood exception even when the classes involve have them defined! > > Odd! I've never seen anything like this at all. > > Do you mean that you got a walkback, and were able to confirm that the > message really was being sent to an object of the class you expected ? > > -- chris > > No, I get a pop up dialog box. This happens once or twice when I start up and then goes away. |
Jerome,
> No, I get a pop up dialog box. This happens once or twice when I start > up and then goes away. I'm with Chris on this one :) I've never had any problems with #queueDeferredAction:. In fact, it's bailed me out of some ugly situations. Just yesterday, I had a thread that was clobbering itself before it could clobber something else, and it's great for updating a GUI from background threads as has been mentioned already. One crazy thought is that your image might have a large number of Process(es) lurking such that things might not be executing as soon as you'd like, and might even be getting executed on startup of a new session rather than during the session that queueed them???? What do you see in the Process Monitor? If it's more than five threads and they don't look familiar to you, it might be time to terminate them and/or panic your image. The usual Dolphin threads are timing, undertaker, finalizer, idler, and main. Most if not all of the essential Dolphin threads will start another thread of the same type if they are terminated, but, a backup wouldn't hurt. Have a good one, Bill -- Wilhelm K. Schwab, Ph.D. [hidden email] |
In reply to this post by Jerome Chan
Jerome,
> > Do you mean that you got a walkback, and were able to confirm that the > > message really was being sent to an object of the class you expected ? >[...] > No, I get a pop up dialog box. This happens once or twice when I start > up and then goes away. Maybe I'm misunderstanding you, but to me that sounds like a walkback dialog. If so, then if you choose the "debug" option then you'll be able to see what the object actually is (as opposed to what you think it is) that doesn't understand the selector in question. My *guess* is that you'll find that you have an uninitialised instvar, or something of that sort. -- chris |
Free forum by Nabble | Edit this page |