Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » SerialPort abhören mit GUI

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
23.09.2010, 14:38 Uhr
~sharth
Gast


Hallo zusammen,

ich nutze das Programm CodeLite unter Ubuntu 10.4 und habe eine Konsolenanwendung geschrieben um Daten über den SerialPort empfangen und auszuwerten. Soweit, so gut!
Jetzt möchte ich für dieses Programm jedoch eine grafische Oberfläche haben.
Das Hauptprogramm läuft in einer while-Schleife und die Funktion select() wird aufgerufen wenn an einem Filedeskriptor Daten anliegen.

Aber wie realisiere ich das mit einer GUI. Mit Aufruf der while-Schleife bleibt logischerweise auch die GUI an der Stelle hängen. Bin noch nicht so erfahren im Programmieren deshalb wäre ich sehr dankbar für einige Vorschläge, die umsetzbar sind.
Gibt es z.B. Events für wxWidgets die das Handling übernehmen könnten, wie z.B. das SerialPort Event in C#. Oder ist das Ganze mit einem parallelen Thread lösbar? Da kenne ich mich leider gar nicht aus!
Bin dankbar für jede Anregung. Auch das eine oder andere Beispiel würde mir sehr helfen.

Viele Grüße,

sharth
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.09.2010, 23:00 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja das beste wäre wohl, das ganze was du bis jetzt hast, in einen thread auszulagern, und die daten dann in eine (gemeinsame) queue zu schreiben, aus dieser liest dann die gui über z.b ein timerevent in einem eigenen thread die daten aus und stellt sie dar.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.09.2010, 15:18 Uhr
~sharth
Gast



Zitat von FloSoft:
naja das beste wäre wohl, das ganze was du bis jetzt hast, in einen thread auszulagern, und die daten dann in eine (gemeinsame) queue zu schreiben, aus dieser liest dann die gui über z.b ein timerevent in einem eigenen thread die daten aus und stellt sie dar.


So in etwa hatte ich mir das gedacht. Mein Problem ist nur die Umsetzung. Habe schon einige Tutorials bezüglich Threads durchgearbeitet. Doch waren nie grafische Oberflächen im Spiel. Kennt jemand Beispiele dafür, wo gezeigt wird, wie man Threads sinnvoll in GUIs einbettet? Oder ist das Ganze so trivial?

Gruß,
sharth
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.09.2010, 17:40 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja:

z.b threading mit boost:


C++:
void run_serial_reader()
{
  while(1); // do what ever you want in your reader-thread
}


void run_gui()
{
// open your window etc here for example ...
}

int main()
{
  boost::thread::thread_pool pool;

  pool.start_thread(&run_serial_reader);
  pool.start_thread(&run_gui);

  pool.join_all();
}



einzige nichttriviale ist, das du natürlich die thread-interkommunikation absichern musst (z.b mit mutex/semaphoren). wichtig ist auch, das du in den meisten gui-bibliotheken nicht aus "fremden" threads auf die gui-elemente zugreifen darfst (also z.b aus dem run_serial_reader nicht direkt auf deine fenster) daher musst du aus dem gui-thread z.b über einen timer dir immer denn füllstand einer thread-globalen queue (zugriffe absichern!) prüfen und dann ggf dir daraus die daten holen und anzeigen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: