Christian Schmitt
2017-01-28 08:32:00 UTC
Hallo Leute,
darf ich mal wieder eure Expertise anfragen? Ich habe eine Anwendung, die auf Messages von extern reagiert. Jede Message wird dabei in eine Logdatei geschrieben mittels einem TFileStream. Es kommen ca. 20. Messages pro Sekunde an und hier und da kommt es dabei leider zu Exception, dass die Logdatei gerade von einem anderen Programm in Benutzung sei. Dem ist aber nicht so, es ist definitiv nur meine Anwendung die die Logdatei schreibt. Ich dachte zuerst, vielleicht gibt es eine "parallele" Ausführung der Prozedur, so dass der erste Filestream noch nicht geschlossen ist, also habe ich das ganze mit einem selbstgebauten FileIsOpen Flag und einem "while FileIsOpen do" gesperrt. Dies half leider nichts. Ich dachte dann vielleicht an den Windows Cache, dass es hier vielleicht zu Problemen kommt, habe somit also ein FlushFileBuffers ausprobiert. Leider ist das Problem immer noch nicht verschwunden. Kann mir jemand sagen, was hier passiert? Es ist auch nur ein Thread im Spiel...
Sind 20 Messages pro Sekunde im übrigen zu viel, wenn ich sie speichern möchte (fixe SSD ist eingebaut ;-) )? Kann ich irgendwie feststellen, ob die Message-Queue voll läuft, wenn das Speichern z.b. zu lange dauert? Was passiert wenn diese voll läuft? Gibt es dann eine Exception oder werden nur keine weiteren Messages angenommen?
Danke nochmal!
Gruß
darf ich mal wieder eure Expertise anfragen? Ich habe eine Anwendung, die auf Messages von extern reagiert. Jede Message wird dabei in eine Logdatei geschrieben mittels einem TFileStream. Es kommen ca. 20. Messages pro Sekunde an und hier und da kommt es dabei leider zu Exception, dass die Logdatei gerade von einem anderen Programm in Benutzung sei. Dem ist aber nicht so, es ist definitiv nur meine Anwendung die die Logdatei schreibt. Ich dachte zuerst, vielleicht gibt es eine "parallele" Ausführung der Prozedur, so dass der erste Filestream noch nicht geschlossen ist, also habe ich das ganze mit einem selbstgebauten FileIsOpen Flag und einem "while FileIsOpen do" gesperrt. Dies half leider nichts. Ich dachte dann vielleicht an den Windows Cache, dass es hier vielleicht zu Problemen kommt, habe somit also ein FlushFileBuffers ausprobiert. Leider ist das Problem immer noch nicht verschwunden. Kann mir jemand sagen, was hier passiert? Es ist auch nur ein Thread im Spiel...
Sind 20 Messages pro Sekunde im übrigen zu viel, wenn ich sie speichern möchte (fixe SSD ist eingebaut ;-) )? Kann ich irgendwie feststellen, ob die Message-Queue voll läuft, wenn das Speichern z.b. zu lange dauert? Was passiert wenn diese voll läuft? Gibt es dann eine Exception oder werden nur keine weiteren Messages angenommen?
Danke nochmal!
Gruß