SetThreadContext - Initialisierung von CONTEXT-Struktur
-
Ich versuche gerade, mittels SetThreadContext einen eigenen Scheduler zu schreiben: Je nach Bedarf tausche ich mit dieser Funktion den Instruction Pointer eines Threads aus. Nun muss ich ja jedem meiner "Threads" auch einen eigenen Stack geben - dafür habe ich die ESP und EBP-Register angepasst. Soweit funktioniert das auch. Aber was ist mit all den anderen Registern bzw. Werten in der CONTEXT-Struktur? Mit den meisten anderen Registern kann ich nichts anfangen
Wie muss ich die initialisieren? Wo finde ich weitere Informationen darüber?
-
Was hast du gegen Fibers?
-
die sind nicht 'preemptive'
-
Versteh ich zwar nicht, denn dein Zeug kann ja dann auch nicht preemptive sein.
Aber ich versuch halt mal, dir zu antworten. Ich würde mit GetThreadContext so ein CONTEXT füllen und dann einfach die paar Register umbiegen, die wichtig sind (also eigentlich nur ESP und EIP). Du musst allerdings beachten, dass du dann kein Structured Exception Handling mehr verwenden kannst (C++ Exceptions laufen auch über SEH).
-
Ringding schrieb:
Versteh ich zwar nicht, denn dein Zeug kann ja dann auch nicht preemtive sein.
Doch. In einem zweiten Thread läuft ein Timer mit extrem hoher Priorität, der gelegentlich meinen Scheduler aufruft, der dann wiederum den CONTEXT austauscht

Ringding schrieb:
Aber ich versuch halt mal, dir zu antworten. Ich würde mit GetThreadContext so ein CONTEXT füllen und dann einfach die paar Register umbiegen, die wichtig sind (also eigentlich nur ESP und EIP).
So ähnlich habe ich es probiert. Wenn die paar Register ausreichen, bin ich beruhigt

Ringding schrieb:
Du musst allerdings beachten, dass du dann kein Structured Exception Handling mehr verwenden kannst (C++ Exceptions laufen auch über SEH).
Das macht nichts (ich habe hier sowieso nur C-Funktionen)