J’essaie de trouver un moyen d’attendre un signal ou une durée maximale telle que la durée correspond à l’heure de l’horloge murale au lieu du temps passé à l’état de veille. Par exemple, pour l’ordre d’événements suivant:
J’aimerais que l’appel wait () soit renvoyé dès que le processus s’exécute car 24 heures de temps écoulé sur wallclock. J’ai essayé d’utiliser std :: condition_variable :: wait_until mais cela utilise le temps de veille de la machine. J’ai également essayé WaitForSingleObject () sur Windows et pthread_cond_timedwait () sur mac en vain. Je préférerais quelque chose de multi-plateforme (par exemple dans la STL) si possible. En tant que sauvegarde, cela ressemble à SetThreadpoolTimer () pour Windows et à dispatch_after () (en utilisant dispatch_walltime ()) sur mac, mais je préférerais bien sûr une seule implémentation. Est-ce que quelqu’un en sait un?
Merci!
using namespace std; int _tmain(int argc, _TCHAR* argv[]) { condition_variable cv; mutex m; unique_lock lock(m); auto start = chrono::steady_clock::now(); cv_status result = cv.wait_until(lock, start + chrono::minutes(5)); //put computer to sleep here for 5 minutes, should wake up immediately if (result == cv_status::timeout) { auto end = chrono::steady_clock::now(); chrono::duration diff = end - start; cerr << "wait duration: " << diff.count() << " seconds\n"; } return 0; }