我想用戶輸入一個時間例如1400h - 這會導致一個函數在1400h運行。在某些時鐘時執行功能
我該怎麼做?
語境:我有一個客戶端 - 服務器程序在同一臺計算機上工作 - 我需要幾個節點同時發送消息(這是上面的功能)
編輯:我不想使用sleep()
功能,理想的,因爲這個問題是客戶端將在不同的時間開始,它是非常簡潔的解決方案來調用的東西,導致在1400H執行功能。
我想用戶輸入一個時間例如1400h - 這會導致一個函數在1400h運行。在某些時鐘時執行功能
我該怎麼做?
語境:我有一個客戶端 - 服務器程序在同一臺計算機上工作 - 我需要幾個節點同時發送消息(這是上面的功能)
編輯:我不想使用sleep()
功能,理想的,因爲這個問題是客戶端將在不同的時間開始,它是非常簡潔的解決方案來調用的東西,導致在1400H執行功能。
如果程序正在運行的整個時間,使用函數如sleep
等待現在和1400H之間的時間量。您可能需要做一個單獨的線程允許程序做其他事情,或者一個事件循環超時更換sleep
(如果程序是事件循環爲基礎)。
如果程序必須退出,那麼您必須使用系統工具,如Unix上的at
來安排要重啓的程序和要在指定時間執行的代碼。
我不想使用'sleep(x)',因爲客戶端會在不同的時間啓動 - 但我希望它們在同一時間啓動。我會在問題中更新它! – sccs
@sccs確切地說,這就是爲什麼'sleep(x)'中的'x'必須是現在到1400h *之間的*時間量。 – user4815162342
您可以使用std::this_thread::sleep_until
,例如
void main()
{
auto fire_time = /**/;
std::thread thread([&]
{
std::this_thread::sleep_until(fire_time);
fire();
});
thread.join();
}
可以重構是爲輔助功能,這可能是你在找什麼:
template<class Func, class Clock, class Duration>
void run_at(Func&& func, const std::chrono::time_point<Clock,Duration>& sleep_time)
{
std::thread(std::bind([&](const Func& func)
{
std::this_thread::sleep_until(sleep_time);
func();
}, std::move(func)))
.detach();
}
我相信你需要某種任務管理器。這是一個基本模型。繁殖睡眠線是完成這項工作的非常錯誤的方法。一個經理會知道什麼時候開始下一個任務。如何運行任務是另一個問題。如果您希望它們互動,您可以爲每個任務創建新線程。或者你可以序列化它們並從管理器線程中運行。
我相信有更多然後足夠的cron模塊C++。嘗試使用其中之一。 –
你需要以某種形式調用sleep(),這是沒有辦法的。 – ronag