Comment utiliser un condition_variable vraiment wait_for pas dépasser une certaine durée

Comme il s'avère, condition_variable::wait_for devrait vraiment être appelé condition_variable::wait_for_or_possibly_indefinitely_longer_than, car il a besoin d'acquérir le verrou avant de vraiment le timing et le renvoi.

Voir ce programme pour une démonstration.

Est-il un moyen d'exprimer, "Regardez, je n'ai que deux secondes. Si myPredicate() est toujours faux à l'époque et/ou de l'écluse est toujours bloqué, je n'ai pas de soins, vient de porter sur indépendamment et de me donner un moyen de détecter que."

Quelque chose comme:

bool myPredicate();
auto sec = std::chrono::seconds(1);

bool pred;
std::condition_variable::cv_status timedOut;

std::tie( pred, timedOut ) =
    cv.really_wait_for_no_longer_than( lck, 2*sec, myPredicate );

if( lck.owns_lock() ) {
    //Can use mutexed resource.
    //...
    lck.unlock();
} else {
    //Cannot use mutexed resource. Deal with it.
};
wait_until peut-être?
J'ai peur wait_until, souffre de la même "fonction". "Une fois notifié, ou une fois qu'il est abs_time, la fonction permet de débloquer et d'appels lck.lock(), laissant lck dans le même état que lorsque la fonction a été appelée. Alors la fonction renvoie (notez que cette dernière mutex verrouillage peut bloquer à nouveau le fil avant de revenir)."
Si vous ne voulez pas être l'acquisition d'un mutex sur l'éveil, les variables de condition de ne pas travailler pour vous, dans n'importe quelle langue.
Juste assez, merci. Comment le feriez-vous? timed_mutex/serrures?

OriginalL'auteur Julian | 2014-08-08