简体   繁体   中英

Does std::condition_variable::wait_until have any advantage against std::this_thread::sleep_for?

In a time waiting scenario:

our software works in the background, and synchronizes data with the server in every 20 - 30 minutes.

I wanted to use

std::this_thread::sleep_for

But my superior strongly against any form of sleep function. He recommends

std::condition_variable::wait_until(lock, timeout-time, pred)

I wonder if there are any disadvantage for sleep_for under such scenario?

As pointed out in the comments already, it depends only on your usecase. The main difference between the two is, that condition_variable can wake up earlier if you trigger it. You also can add a predicate that must be satisfied in order to actually wake up, but that's only a quality of life addition. And btw, the equivalent to sleep_for is wait_for and not wait_until . condition_variable is also great to communicate or synchronize between multiple threads.

Given everything you said, I would use condition_variable for the following reasons:

  1. Putting a thread to sleep for longer periods of time is not a good idea because your application can exit at any time (or rather can be requested to exit). In that case you probably want your thread to exit properly, so you have to be able to wake it up at any time.
  2. You want to change the config on the fly. If your thread has to restart with new parameters or if you need that thread to actually load the config file you also don't want to wait for the next 20min intervall to end.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM