sind gestapelte Timer möglich

16. Februar 2009 18:03

So, ich hab wieder mal was Kniffeliges:
Ich habe ein Automatisierungsobjekt was via Single-Instance-CodeUnit (ab jetzt CU1) und Events mit Navision kommuniziert. Nun ist das Problem das die restliche Applikation auf ein Ergebnis der CU1 warten soll. Meine Idee war nun die vorgeschaltete Codeunit (CU2) auch mit einem Timer als SI auszustatten, in ihr eine globale Variable zu definieren die mit einem Methodenaufruf entsprechend gesetzt wird. Die Timerroutine wartet nun auf die Entsperrung der globalen Variable - und kommt da scheinbar nimmer raus. Genau betrachtet tritt das Timer-Ereignis in der CU2 nicht ein.
Ich vermute nun das pro "Job" nur ein Timer aktiv sein kann. Kann das wer bestätigen? In dem Fall würde der Timer der CU1 den der CU2 überschreiben.
Hier noch mal der schematische (gewollte) Ablauf

CU2 startet und führt Initialisierung aus (auch Timer!)
CU2 ruft CU1
CU1 führt Initalisierung aus
CU1 ruft Methode in CU2 auf um ein Sperrflag zu setzen
CU1 startet Automatisierungsobjekt
CU1 wartet auf Automatisierungsobjekt und gibt die Kontrolle an CU2 zurück
CU2 startet Timer und macht nix bis das Sperrflag zurückgesetzt ist
:
irgendwann wird das Automatisierungsobjekt fertig und schubst die CU1 an
CU1 aktualisiert Navision und ruft eine Methode von CU2 zum entsperren des Sperrflags auf
CU1 ist jetzt tatsächlich fertig aber noch im Speicher da ja Single Instance
:
beim nächsten Timerevent merkt CU2 das das Flag nimmer gesperrt ist und fährt mit der Bearbeitung fort.

Während ich auf eure Antworten warte hab ich versucht die Synchronisation der CU2 über einen Eintrag in einer Tabelle und statt dem Timer über Sleep zu lösen.
Aber Tabellen find ich an der Stelle unpassend weil ich entweder die Tabelle temporär definieren kann (und dann durchreichen muss) oder das Problem habe das nur genau ein Job laufen darf - sonst bringen sich die Jobs ja gegenseitg durcheinander. Natürlich kann man auch nen Key definieren und den mit durchreichen - aber das find ich auch nicht so toll.

Die Fragen noch mal zusammengefasst:
1. Kann man Timer stapeln oder überschreiben die sich gegenseitig?
2. Habt ihr solche Synchronisationsprobleme und wie löst ihr die?
3. Aus Sicht Performance: Sleep oder Timer?

Ich danke schon mal
WoF