Problem with ros::Rate sleep function
There seems to be a strange problem with the sleeping function for me. I've encountered it when I have two threads open at the same time. One is for the ros::Ok loop, and the other one is for getting data from a device. Basically, I need to get data from the device inside the ros::Ok loop. In this case, there is no problem since the device class has its own while loop that isn't being interrupted by the main loop. Take a look at the following code
int main(int argc, char** argv) {
ros::init(argc, argv, "project1");
ros::NodeHandle n;
double sampling(10);
ros::Rate nap(sampling);
while( ros::ok() )
{
cout << "--------" << endl;
nap.sleep(); // problem
//std::this_thread::sleep_for(std::chrono::milliseconds(200)); // no problem
}
return 0;
}
The problem with nap.sleep() is the fact that the line '-------' is being printed out one time. I have to restart the roscore in order to resolve the issue. The problem occurs occasionally and specifically with multi-threads. However, with std::this_thread::sleep_for
, I don't face any problem. I'm wondering what is the thing blocking the cout
?