thread hängt bei while



  • Hey Leute,
    Ich habe eine frage zum std::thread.

    Wenn ich ein Thread erstelle wie z.B. hier:

    std::thread t(meineFunktion);
    t.join;

    std::thread t(meineFunktion);
    t.join;
    

    und in der "meineFunktion" ein while statement ist, bleibt mein Programm beim while statement obwohl es doch fortfahren sollte (dennoch das while statement ausfführen muss)

    while(true)
    {
    ...
    }
    

    Freue mich auf jede Antwort



  • Hi,

    was hängt, bzw.was soll deiner Meinung nach 'fortfahren'?

    Thread hängt endlos im while(true) und der main-thread wartet (join) auf den Thread.



  • Also ich wollte eigentlich einen Listener erstellen und das Programm sollte die while schleife in den Hintergrund stecken damit imputs weiterhin funktionieren ansonsten bleibt ja das Programm in der while schleife stecken.



  • Warum dann join?



  • Dadurch stürtz mien Programm ab



  • reba schrieb:

    Dadurch stürtz mien Programm ab

    Das soll wohl heißen, dadurch stürzt es nicht ab.

    Du musst dem Thread sagen, das er die Schleife beenden soll, und erst dann warten:

    #include <iostream>
    #include <chrono>
    #include <thread>
    #include <atomic>
    
    int main()
    {
      using namespace std::literals;
    
      std::atomic<bool> run{ true };
    
      std::thread t{ [&]{
          while( run ) {
            // hier was tun
            std::this_thread::sleep_for(2s);
            std::cerr << "Thread\n";
          }
      }};
    
      // hier was tun
      std::cerr << "main schläft\n";
      std::this_thread::sleep_for(20s);
      std::cerr << "main wach\n";
    
      // habe fertig, thread beenden
      run = false;
      t.join();
    
    }
    

Anmelden zum Antworten