Existe-t-il des fonctions LIST qui utilisent le temps wallclock au lieu du temps «réveillé»?

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:

  1. Une fonction wait () est appelée pendant 24 heures maximum
  2. 12 heures passent
  3. La machine est mise en sumil
  4. 12 heures passent
  5. La machine est réveillée

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; }