c++ und phtreads



  • Ich komme eig. aus der C welt und habe damals oft pthreads für consolenanwendungen benutzt.

    Nun habe ich folgendes Prob:
    [code]
    pthread_create(&send,NULL,sendData, NULL) //ist ja jedem so bekannt
    [code]
    Dabei gehört die Struct send wieauch die Funktion senData zu einer Klasse und hier fangen die Probleme an. Der Kompiler meckert bei:
    Argument des typs >>void*(Class::)(void*)<< passt nicht zu >>void* ()(void)<<
    Also kann ich wohl keine Klassenfunk. nehmen oder - was sind meine Alternativen??
    mfg
    dw



  • Du kannst eine statische Klassenfunktion nehmen und dir als Argument die eigentliche Klasse übergeben lassen.

    Andernfalls kannst du mal einen Blick auf Boost-Threads werfen.



  • THx
    mat static und (void*)this als para gehts - geily
    Muss mir den oop ansatz noch mehr ins hrin brennen

    danke und schönes we
    dw



  • davidwal schrieb:

    Muss mir den oop ansatz noch mehr ins hrin brennen

    Das ist leider kein OOP, sondern nur ein Workaround, weil es nicht anders geht. Wenn du es schön haben willst, müsstest du eine C++-Thread-Biliothek verwenden.

    Dir auch noch ein schönes Wochenende



  • Dann sagt mal an.
    Welche Libs sollte ich denn in Verbindung mit gnu c++ nehmen?
    Zb cc++??



  • davidwal schrieb:

    Zb cc++??

    Die kenne ich jetzt nicht. Du kannst natürlich auch bei pthreads bleiben und damit es schön ist, kannst du eine Wrapperklasse schreiben.

    Boost Thread ist nicht schlecht: http://www.boost.org/doc/html/thread.html

    Falls du ein Framework einsetzten willst.
    Bei QT ist auch eine Thread Klasse: http://doc.trolltech.com/4.1/qthread.html

    und bei wxWidgets auch: http://www.wxwidgets.org/manuals/stable/wx_wxthread.html#wxthread



  • ... wenn de den Zeit hast. Nee Froge

    Habe jetzt in meiner Klasse eine static memberfunktion die auch als thread startet. Zusätzlich besitzt die Klasse eine static queue, die zu sendenen Obj hält. Leider kann ich von anderen memberfunk aus darauf zugreifen bzw. etwas anhängen - verstehe das noch nicht so ganz.

    zb
    DataQueue.push(obj);
    Kompiler antwort:
    undefined reference to `Class::DataQueue'
    collect2: ld gab 1 als Ende-Status zurück
    make: *** [all] Fehler 1
    ? O|ò ? - weiss nicht wieso "undefined reference"

    gruss dw



  • Willst du die Queue wirklich static machen? Das static ist nur für die Funktion gedacht.

    Naja... wenn du Variablen als static deklarierst, musst du sie irgendwo initialisieren. Also musst du irgendwo in deiner Klassen-CPP-Datei das hier schreiben

    Class::DataQueue;
    


  • Da funzt alles nicht ... manmanman

    static queue<Class> QueueData; //geht

    aber ich kann nirgendwo darauf zugreifen!

    In der static Threadfunktion:

    // wenn ich zb mit size() die grösse abfrage
    Multiple markers at this line
    - Variable »i« wird nicht verwendet
    - undefined reference to `Class::QueueData'

    // das gleiche in jeder andere funktion dieser Klasse:
    UND -witzig
    Eclipse CDT gibt mir immer braf die static var-rümpfe heraus

    mfg
    dwa

    PS: Was meinst Du??
    Naja... wenn du Variablen als static deklarierst?????, musst du sie irgendwo initialisieren. Also musst du irgendwo in deiner Klassen-CPP-Datei das hier schreiben

    static queue<class> QueueData; steht so in der klassen - was muss ich da noch initialisieren??
    class::QueueData; hat keinen Effekt!!!



  • Hi, also (D)Evil hat zu dem Problem in einem anderen Thread schon was Code gepostet [1]. Vielleicht schaust du dir das mal an. Ich könnte dir besser helfen, wenn du den betreffenden Code posten würdest. Deine Beschreibungen sind ein wenig wage. Aber wie gesagt, schau dir erstmal [1] an.

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-205747-and-highlight-is-.html#1457702


Anmelden zum Antworten