2016-05-27 17 views
1

Ich bin ein Neuling in der Verwendung von Threads. Ich habe ein Programm in C++ entwickelt, das wxwidgets verwendet, um die Anzahl der Pakete anzuzeigen, die über die Netzwerkschnittstelle empfangen werden. Was ich bisher gemacht habe ist: Ich habe eine in einer wxdialog. Beim Klicken auf die Schaltfläche wird eine wxframe mit wxgrid geöffnet. Die wxgrid enthält Informationen wie Schnittstellenname, Pakete ein und Pakete aus.Verwenden Sie wxthread, um den Inhalt von wxframe in C++ zu aktualisieren.

Nun, was ich brauche, ist die Pakete in und Pakete ständig aktualisiert zu aktualisieren. Ich habe eine Funktion, die die ein- und ausgehenden Pakete berechnet. Also ich denke, ich muss die Funktion kontinuierlich ausführen, bis der Benutzer die frame schließt.

Ich hoffe wxthread kann verwendet werden, um dies durchzuführen. Habe aber keine Ahnung, wie man mit einem Thread anfängt oder wie eine Funktion ausgeführt werden kann. Kann mir jemand bitte Anleitung .. DANKE

+1

Haben Sie versucht, sich die wxWidgets-Dokumentation anzusehen? Gibt es etwas, das nicht klar ist? – Igor

+0

@Igor: Ich tat .. Aber ich habe nicht verstanden, wie man es in der Art, wie ich brauche – Jackzz

Antwort

2

Ein Worker-Thread kann nicht direkt auf ein GUI-Objekt zugreifen, also müssen Sie Ereignisse in den Hauptthread posten, wo Sie Event-Handler für sie definieren können, die tun werden, was Sie brauchen. Es gibt eine praktische Basisklasse für solche Ereignisse, die Sie unter wxThreadEvent finden können.

Alternativ und besonders wenn Sie C++ 11 verwenden, können Sie CallAfter() verwenden, mit dem Sie einen Rückruf im Hauptthreadkontext ausführen können. Dies ist besonders schön mit C++ 11 lambdas, da Sie damit Ihren gesamten Code am selben Ort behalten können, ohne ihn in einen separaten Event-Handler extrahieren zu müssen.

+0

implementieren Es tut mir leid zu fragen .. Aber können Sie ein einfaches Beispiel geben .. – Jackzz

+0

Das Thread-Beispiel verteilt mit wxWidgets selbst zeigt die Verwendung von 'wxThreadEvent'. Beispiele für 'CallAfter()' finden Sie im [Blog Post darüber] (http://wxwidgets.blogspot.com/2013/01/about-benefits-of-procrastination.html), obwohl es für eine andere verwendet wird Zweck dort. –