eintyp
Goto Top

Cpp Threads wie in Java

Hallo Community,

mich würde es interessieren ob man das Threading-Modell von Java auf C++ übertragen kann.

Wie würde dieses Java-Programm in C++ aussehen:

public class Threading {
    public static void main(String args) {
        System.out.println("start");  
        Thread t = new Thread(new Runnable() {
            public void run() {
                for (int i=0; i<10; ++i) {
                    System.out.println(i);
                    try { Thread.sleep(50); } catch (InterruptedException ex) { }
                }
            }
        });
        t.start();
        System.out.println("done.");  
    }
}

Bei C++ ist das Problem, dass der Main-Thread angehalten wird bis die erstellten Threads abgearbeitet sind:

#include <iostream>
#include <boost/thread.hpp>

void run() {
    for (int i=0; i<10; ++i) {
        std::cout << i << std::endl;
        boost::this_thread::sleep(boost::posix_time::milliseconds(50));
    }
}

int main(int argc, char** argv) {
    std::cout << "start" << std::endl;  

    boost::thread t(run);
    t.join();
    
    std::cout << "done" << std::endl;  
    
    return 0;
}

Ich hoffe ihr könnt mir hierbei helfen.

-EinTyp-

Content-Key: 193369

Url: https://administrator.de/contentid/193369

Printed on: April 25, 2024 at 11:04 o'clock

Member: dog
dog Oct 26, 2012 at 22:03:19 (UTC)
Goto Top
Bei C++ ist das Problem, dass der Main-Thread angehalten wird bis die erstellten Threads abgearbeitet sind:

Öhm, ja.
Genau das steht in deinem Programm:

t.join(); 

Effects:
If *this refers to a thread of execution, waits for that thread of execution to complete.
Member: EinTyp
EinTyp Nov 11, 2012 at 21:23:51 (UTC)
Goto Top
Meine Frage war ja auch, ob das ganze so wie in Java möglich ist.
(Das mit einer Methode der Thread gestartet wird und der Main-Thread dabei weiterläuft)
Member: chfr77
chfr77 Dec 10, 2012 at 10:25:42 (UTC)
Goto Top
Was heisst denn "wie in Java"? Java ist eine Emulator/Interpreter-Umgebung, die viel weniger Möglichkeiten bietet als nativer Code.

Wenn Du einen einzelnen Thread startest und wartest bis sich dieser mit dem Aufrufer vereinigt, hättest Du Deinen Code auch direkt im Aufruferkontext laufen lassen können.

Wenn Du mit "irgendeiner Threadingbibliothek" einen neuen Thread erzeugst, der dann in seiner eigenen Hauptfunktion läuft, ist dieser natürlich vom Aufruferthread abgekoppelt und hat einen eigenen Ausführungskontext (vom Betriebssystem) erhalten.