我遇到了問題。我想創建一個程序,在計時器正在進行時等待輸入。我發現使用睡眠不起作用,因爲它會凍結固定時間的程序。我不太瞭解時間參考以及線索參考。我在Mac機中使用Netbeans來做這件事。倒計時定時器線程
我該怎麼做?
我遇到了問題。我想創建一個程序,在計時器正在進行時等待輸入。我發現使用睡眠不起作用,因爲它會凍結固定時間的程序。我不太瞭解時間參考以及線索參考。我在Mac機中使用Netbeans來做這件事。倒計時定時器線程
我該怎麼做?
既然你是一個Mac上使用OSX您的是:(最有可能),這是POSIX兼容。
然後你就可以使用例如select
輪詢標準輸入是否有輸入。 select
函數也方便地具有超時功能。
可以使用類似
fd_set input_set;
timeval timeout;
FD_ZERO(&input_set);
FD_SET(STDIN_FILENO, &input_set);
// Set timeout to one minute
timeout.tv_sec = 60;
timeout.tv_usec = 0;
int result = select(STDIN_FILENO + 1, &input_set, nullptr, nullptr, &timeout);
if (result == -1)
std::cout << "Error in select call: " << strerror(errno) << '\n';
else if (result == 0)
{
// Timeout, do something here
}
else if (FD_ISSET(STDIN_FILENO, &input_set))
{
std::string input;
std::getline(std::cin, input);
// Have input, do something with it
}
我真的不明白這部分 '否則,如果(FD_ISSET(STDIN_FILENO,與input_set)){ 的std :: string輸入; std :: getline(std :: cin,input); //有投入,用它做的東西 }' 這是什麼意思? –
@JoelSeah'select'調用修改描述符集合,並使用'FD_ISSET'宏/函數來檢查描述符是否在集合中被設置。正文部分從標準輸入流中讀取一行輸入。 –
嗯。那麼每當用戶輸入一個輸入時,我可以在哪裏顯示倒計時的一部分? –
這是一個 「控制檯」 或 「GUI」 應用程序? –
@MatsPetersson是的,這是一個控制檯應用程序 –
那麼你將很難做到這一點使用「標準」的功能,因爲與例如'cin'或'getline'等的投入,是不可能停止 - 除非你要退出整個程序。 –