2009-07-15 3 views

Antwort

3

Die Protokollierung hat kürzlich einige große Updates in der WXWidgets Trunk, können Sie über sie here lesen. Eine davon ist das Hinzufügen von Unterstützung für die Protokollierung von Threads, die nicht zum Hauptthread gehören.

1

Inwiefern scheitert es? Ich bin nicht vertraut mit der wxTextCtrl, aber wenn es keine Synchronisation (dh seine Thread-Safe) eingebaut hat, könnte das ein großes Problem sein. Der einfachste Weg, um eine einzelne Ressource wie diese zu schützen, ist über einen benannten 'Mutex'. Das folgende Beispiel zeigt, was Sie in jedem Thread tun können, um sicherzustellen, dass immer nur einer auf diese Ressource (das Ausgabefenster) zugreift.

// In each thread's initialization: 
HANDLE mutexHandle = CreateMutex(0,FALSE,"__my_protecting_mutex__"); 


// Whenever you use the debug output: 

WaitForSingleObject(mutexHandle, /* Timeout if you like. */ 0xFFFFFFFF); 
// Do our printing here. 
ReleaseMutex(mutexHandle); 


// In each thread's cleanup: 
CloseHandle(mutexHandle); 

Also im Grunde garantiert, dass nur ein Thread zwischen dem Warten und dem Release sein kann. Wenn Ihr Problem nun tatsächlich auf die wxTextCtrl verweist, würde ich weitere Details benötigen.

Edit: Ich habe gerade festgestellt, dass das, was ich gepostet hat, Windows-spezifisch ist, und vielleicht sind Sie nicht auf Windows! Wenn nicht, habe ich keine Erfahrung mit den Synchronisationsmethoden anderer Plattformen, aber Boost hat einige generische Bibliotheken, die nicht plattformspezifisch sind.

+0

wxWidgets hat eine eingebaute, plattformübergreifende wxMutex-Klasse http://docs.wxwidgets.org/stable/wx_wxmutex.html – GRB

+1

Die Synchronisation ist nur ein Teil davon. Es ist eine schlechte Idee, direkt von verschiedenen Threads in eine wxTextCtrl zu schreiben. Eine bessere Möglichkeit besteht darin, einer threadsicheren (synchronisierten) Datenstruktur Protokollnachrichten hinzuzufügen, und der Haupt-GUI-Thread protokolliert das Textsteuerelement aus der Warteschlange Daten. WxWidgets Trunk hat dies jetzt, siehe die andere Antwort. – mghie