我正在從事一種「控制塊」,每6分鐘發一個標誌。事情是,我不知道是否有一個簡單的方法來做到這一點。我已經在循環中使用clock_t,直到達到6分鐘,然後調用一個方法來發送該標誌並重新初始化clock_t變量。如何每X分鐘發一個標誌?
我忘了解釋一些事情,睡眠不是一種選擇,因爲塊就像一個流程,它必須一直髮送一些東西。實際上,標誌將改變什麼事先發送
感謝
我正在從事一種「控制塊」,每6分鐘發一個標誌。事情是,我不知道是否有一個簡單的方法來做到這一點。我已經在循環中使用clock_t,直到達到6分鐘,然後調用一個方法來發送該標誌並重新初始化clock_t變量。如何每X分鐘發一個標誌?
我忘了解釋一些事情,睡眠不是一種選擇,因爲塊就像一個流程,它必須一直髮送一些東西。實際上,標誌將改變什麼事先發送
感謝
您只需睡螺紋6分鐘,然後發送標誌:
for(;;)
{
sendFlag();
sleep(6*60);
}
Here are some options for the sleep method,包括C++ 11的std::this_thread::sleep_for
。
感謝您的回答。我忘了解釋一些事情,睡眠不是一種選擇,因爲這個區塊像流動一樣工作,它必須一直髮送一些東西。實際上這個標誌會改變發送的內容 – xuandl
@xuandl:Luchian的解決方案不會阻止你這麼做,因爲sleep是在單獨的線程下運行的,但它確實意味着你需要了解多線程和線程同步。從你的問題來看,你是否預料到這一點並不清楚。 –
您可以簡單地使用一個線程函數來打開或關閉標誌,並一次睡6分鐘。例如:
bool flag = false;
int main() {
while(true) {
if (flag == true) {
flag = false;
}
}
return(0);
}
void threadFunc() {
flag = true;
sleep(360); //360 seconds is 6 minutes
}
注意:您將需要使用一個互斥體或信號燈因爲現在寫的代碼是不是線程安全。你如何使用線程也取決於操作系統。除非你使用C++ 11當然。
您並不需要一個完整的線程。使用系統OS定期計時器回調。
如何開始一個單獨的線程只是爲了「睡眠」? – Angew