Schorsch
14.01.2008, 13:51
Hallo,
ich hab einen OPC-Client (http://de.wikipedia.org/wiki/OLE_for_Process_Control) geschrieben der mit mehreren Threads arbeitet. Jeder dieser Threads erzeugt diverse Meldungen die in eine Logfile und in ein Grid geschrieben werden. Von der Software laufen 49 Instanzen auf diversen Servern ohne Probleme. Seit kurzem hab ich einen Kunden bei dem das Teil in unregelmäßigen Abständen knallt.
Ich habe nun den Verdacht die Appl. beim schreiben in das Grid auf die Schnauze fällt.
Ich will mir nun eine art Nachrichten-Queue erstellen der alle Meldungen erfasst, und dann in dem Logfile und dem Grid ablegt. Das ganze soll threadsicher sein. Hat jemand einen Tipp für mich bezüglich umsetzung?
Für den Queue sollte eine verkettete Liste reichen, nur wie soll ich die Threadsicherheit hinbekommen? Soll ich den wechselseitigen Aussschluss über einen Mutex, Semaphore oder Critical Section umsetzen? Ich muss Deadlooks, Abstürze usw. auf jeden Fall verhindern.
Die Umsetzung erfolgt via C++/MFC. Der Client bekommt ca. 2000 Messwerte/Sekunde soll Monate ohne Neustart durchlaufen.
Gruß
Schorsch
ich hab einen OPC-Client (http://de.wikipedia.org/wiki/OLE_for_Process_Control) geschrieben der mit mehreren Threads arbeitet. Jeder dieser Threads erzeugt diverse Meldungen die in eine Logfile und in ein Grid geschrieben werden. Von der Software laufen 49 Instanzen auf diversen Servern ohne Probleme. Seit kurzem hab ich einen Kunden bei dem das Teil in unregelmäßigen Abständen knallt.
Ich habe nun den Verdacht die Appl. beim schreiben in das Grid auf die Schnauze fällt.
Ich will mir nun eine art Nachrichten-Queue erstellen der alle Meldungen erfasst, und dann in dem Logfile und dem Grid ablegt. Das ganze soll threadsicher sein. Hat jemand einen Tipp für mich bezüglich umsetzung?
Für den Queue sollte eine verkettete Liste reichen, nur wie soll ich die Threadsicherheit hinbekommen? Soll ich den wechselseitigen Aussschluss über einen Mutex, Semaphore oder Critical Section umsetzen? Ich muss Deadlooks, Abstürze usw. auf jeden Fall verhindern.
Die Umsetzung erfolgt via C++/MFC. Der Client bekommt ca. 2000 Messwerte/Sekunde soll Monate ohne Neustart durchlaufen.
Gruß
Schorsch