同时能做到while内的程序能一直运行,执行完一次if语句之后才跳出循环
时间: 2024-03-28 18:42:18 浏览: 98
可以将 while 循环中的条件判断改为一个函数,该函数每隔一段时间会检查一次条件是否满足,如果满足就执行相应的操作,否则就继续等待下一次检查。这样就可以避免循环中的阻塞,同时也能保证程序一直运行,直到条件满足才跳出循环。修改后的代码如下:
```c++
bool check_condition(const std::string& logs_path) {
auto now1 = std::chrono::system_clock::now();
std::time_t now_c1 = std::chrono::system_clock::to_time_t(now1);
std::tm parts1 = *std::localtime(&now_c1);
if (parts1.tm_min % 10 == 0) {
std::string folder_name = logs_path + get_current_time();
create_folder(folder_name);
return true;
}
return false;
}
int main(int argc, char** argv) {
std::string logs_path = "/home/sage/logs/";
std::string folder1_name = logs_path + get_current_time_M_10();
create_folder(folder1_name);
ros::init(argc, argv, "log_fetch");
ros::NodeHandle nh;
ros::Subscriber sub = nh.subscribe("/rosout", 1000, callback);
ros::Timer timer1 = nh.createTimer(ros::Duration(600), new_folder_callback);
bool s = false;
while (!s) {
s = check_condition(logs_path);
std::this_thread::sleep_for(std::chrono::seconds(5));
}
ros::spin();
return 0;
}
void new_folder_callback(const ros::TimerEvent&){
std::string folder_name = logs_path + get_current_time();
create_folder(folder_name);
}
```
其中,check_condition() 函数会每隔 5 秒检查一次条件是否满足,如果满足就执行相应的操作并返回 true,否则就返回 false。在 main() 函数中,将原来的 while 循环改为调用 check_condition() 函数,如果检查到条件已经满足则跳出循环。这样一来,程序将不会被阻塞,同时也能一直运行,直到条件满足才跳出循环。
阅读全文