marcov hat geschrieben:
... bitte tragen Sie das alle als als Bug ein in Mantis

Ja. Timeouts funktionieren eben nicht richtig - ohne Timeout scheint alles so weit zu funktionieren.
Als Ersatz für die nicht funktionierenden Events habe ich früher unter Linux CriticalSections genommen, aber da gibt es weitere Probleme.
In manchen APIs sind Critical Sections "reentrant", was sie als Ersatz für Events eher unbrauchbar macht.
(man kann Ressourcen schützen, aber ohne aktives pollen kann man damit nicht so einfach kommunizieren).
Irgendwo habe ich gelesen, dass jemand die Critical Sections in FPC aus konsistenzgründen alle reentrant gemacht hat.
Was sie dann wohl als Ersatz für TEvent unter Linux weniger brauchbar macht...
Das Problem mit reentrant CS kann man in dem Code-Fragment von Warf grob erkennen.
Thread A: CS.Create
Thread A: CS.Enter (wartet darauf, dass Thread B die CS freigibt)
Thread B: Im Execute kommt irgendwann CS.Enter.
Thread A muss also erst darauf warten, dass Thread B im Execute den Code mit dem CS.Enter erreicht hat, bevor er auf die CS warten kann
... wozu man wieder ein anderes Event braucht... wozu man eine CS braucht, die ein Event braucht, ....
-> das funktioniert so nicht
(Als Fix das CS.Enter in den Konstruktur von Thread B zu verschieben hilft vermutlich auch nicht, da der Konstruktor im Kontext von Thread A läuft,
was bei reentrant-CS dazu führt, dass Thread A beim CS.Enter dann überhaupt nicht mehr blockiert)
Was man als Ersatz für ein Event bräuchte, wäre so etwas:
Thread A: CS.Enter
Thread A: CS.Enter (wartet darauf, dass jemand anderes CS.Leave aufruft)
Thread B: CS.Leave
Thread A: macht weiter
Mit reentrant CS kriegt man Events so leider nicht hin.