Ich spiele, um zu versuchen, einem Thread eine Zeitüberschreitung zu geben. Ich versuche, std::condition_variable::wait_for zu verwenden, aber das verhält sich anders, als ich erwarten würde.Bedingung Variable Timeout nicht verstanden
Hier ist mein einfacher Code:
#include <iostream>
#include <thread>
#include <chrono>
#include <mutex>
#include <condition_variable>
std::mutex myMutex;
void waitSec(int seconds)
{
std::cout <<"t1 start" <<std::endl;
std::unique_lock<std::mutex> lock(myMutex);
std::this_thread::sleep_for(std::chrono::seconds(seconds));
std::cout <<"t1 end" <<std::endl;
}
int main(void)
{
// launch thread that sleeps 10s
std::thread t1(waitSec,10);
std::this_thread::sleep_for(std::chrono::seconds(1));
// wait for lock during max 1 second
std::condition_variable* conditionVariable = new std::condition_variable();
std::cout << "before" << std::endl;
std::unique_lock<std::mutex> lock(myMutex);
conditionVariable->wait_for(lock,std::chrono::seconds(1));
std::cout << "after" << std::endl;
t1.join();
}
Ich erwarte, dass Thema T1 zum schlafen für 10 Sekunden. Da ich dem wait_for
im Hauptthread 1s Timeout gebe, würde ich erwarten, dass after
vor t1 end
gedruckt wird.
Was stattdessen passiert ist, dass t1 für 10 Sekunden läuft, (Drucken t1 end
) und nur 1s nach after
gedruckt wird.
Können Sie mir erklären, warum es sich so verhält und was ich tun sollte, um mein Timeout als Timeout zu erhalten?
es sieht aus wie t1 gesperrt myMutex und Haupt-Thread sollte warten, bis es veröffentlicht – DAG