389 Stimmen

Einfaches Beispiel für Threading in C++

Kann jemand ein einfaches Beispiel für das Starten zweier (objektorientierter) Threads in C++ posten?

Ich bin auf der Suche nach tatsächlichen C++-Thread-Objekte, die ich ausführen Methoden auf (oder etwas ähnliches) im Gegensatz zu Aufruf einer C-Stil-Thread-Bibliothek erweitern können.

Ich habe keine betriebssystemspezifischen Anfragen gestellt, in der Hoffnung, dass derjenige, der geantwortet hat, mit plattformübergreifenden Bibliotheken antworten würde. Ich bin nur machen, dass explizit jetzt.

17voto

Deepak Kr Gupta Punkte 6974

Wenn man nicht eine separate Funktion in globalen Namespacs haben möchte, kann man Lambda-Funktionen für die Erstellung von Threads verwenden.

Einer der größten Vorteile der Erstellung von Threads mit Lambda ist, dass wir keine lokalen Parameter als Argumentliste übergeben müssen. Wir können dafür eine Capture-Liste verwenden, und die Closure-Eigenschaft von Lambda kümmert sich um den Lebenszyklus.

Hier ist ein Beispielcode

int main() {
    int localVariable = 100;

    thread th { [=](){
        cout<<"The Value of local variable => "<<localVariable<<endl;
    }};

    th.join();

    return 0;
}

Ich habe festgestellt, dass C++-Lambdas bei weitem der beste Weg sind, um Threads zu erstellen, insbesondere für einfachere Thread-Funktionen

10voto

LorenzCK Punkte 7293

Das hängt weitgehend von der Bibliothek ab, die Sie verwenden möchten. Wenn Sie zum Beispiel die wxWidgets-Bibliothek verwenden, würde die Erstellung eines Threads wie folgt aussehen:

class RThread : public wxThread {

public:
    RThread()
        : wxThread(wxTHREAD_JOINABLE){
    }
private:
    RThread(const RThread &copy);

public:
    void *Entry(void){
        //Do...

        return 0;
    }

};

wxThread *CreateThread() {
    //Create thread
    wxThread *_hThread = new RThread();

    //Start thread
    _hThread->Create();
    _hThread->Run();

    return _hThread;
}

Wenn Ihr Haupt-Thread die CreateThread-Methode aufruft, erstellen Sie einen neuen Thread, der mit der Ausführung des Codes in Ihrer "Entry"-Methode beginnt. In den meisten Fällen müssen Sie einen Verweis auf den Thread behalten, um ihm beizutreten oder ihn zu stoppen. Weitere Informationen finden Sie hier: wxThread-Dokumentation

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X