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-ID: 193369

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

Ausgedruckt am: 05.11.2024 um 16:11 Uhr

dog
dog 27.10.2012 um 00:03:19 Uhr
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.
EinTyp
EinTyp 11.11.2012 um 22:23:51 Uhr
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)
chfr77
chfr77 10.12.2012 um 11:25:42 Uhr
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.