Hallo !
Jetzt muss ich mir doch noch etwas von der Seele schreiben, das mich seit Tagen beschäftigt, vielleicht kann mir jemand einen Tipp geben.
Möchte innerhalb eines Prozesses Hintergrundfunktionen hochprior zyklisch aufrufen (ca. 100ms); dazu wird jeweils ein Threading.Thread angelegt, der eine Prozedur verwaltet, die die Funktion in einer Schleife aufgeruft. Die Schleife wartet auf einen Threading.Semaphore, der in der Callback-Routine eines Threading.Timer gesetzt wird. Das läuft auch soweit, nur schwankt die Zykluszeit stark.
Nachdem ich gesehen habe, dass die Callback-Routine nur mit normaler Priorität läuft, auch wenn der Timer innerhalb des hochprioren Threads instanziiert wurde, habe ich die Zeitsteuerung komplett in die hochpriore Aufrufprozedur verlegt, indem über Thread.Sleep die Zeit bis zum nächsten Start verschlafen wird. - Das Ergebnis ist genauso unbefriedigend.
Nach meinem bisherigen Kenntnisstand liegt die Ursache darin, dass die Synchonisationsmechanismen wie Timer und Sleep im Threadpool verwaltet werden, und dort haben alle normale Priorität. Damit wird ein hochpriorer Thread im Zustand WaitSleepJoin duch einen Thread mit niedrigerer Priorität ausgebremst (die Sleep-Time wird verlängert)
Die Frage ist also schlicht :
Wie wird ein exakter zyklischer Trigger (+-1 Takt der Threadverwaltung) realisiert ?