Tôi muốn một sợi chỉ tăng để ngủ trong vài nano giây. Đoạn mã sau là một mẫu biên dịch không có lỗi. Tuy nhiên, nó không hoạt động như mong đợi và tôi không thể hiểu tại sao.Ngủ một sợi chỉ tăng cho một số nano giây
#include <iostream>
#include <boost/thread.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time.hpp>
//Building options:
//-DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIG -lboost_date_time-mt -lboost_thread-mt
void replay()
{
boost::posix_time::time_duration time1, time2;
time1=boost::posix_time::seconds(3);
std::cout << boost::posix_time::to_simple_string(time1) << std::endl;
boost::this_thread::sleep(time1);
time2=boost::posix_time::nanoseconds(987654321);
std::cout << boost::posix_time::to_simple_string(time2) << std::endl;
boost::this_thread::sleep(time2);
}
int main(int argc, char* argv[])
{
boost::thread replaythread(replay);
replaythread.join();
return 0;
}
Các BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG là một định nghĩa preprocessor cần thiết để làm việc với nano giây (more info). Các vấn đề xảy ra khi tôi đặt tùy chọn xây dựng -DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIG, sau đó tăng :: this_thread :: sleep không hoạt động với bất kỳ posix :: time_duration nào. Chủ đề được tạo sử dụng tất cả CPU và nó không ngủ cũng như không xử lý các hướng dẫn còn lại. Nếu định nghĩa tiền xử lý được loại bỏ, luồng có thể ngủ trong bất kỳ khoảng thời gian nào trừ khi tăng :: posix_time :: nano giây. Chương trình sử dụng một số biến thời gian để lưu trữ nano giây và điều đó làm tăng :: this_thread :: sleep không hoạt động.
Cảm ơn bạn rất nhiều vì thời gian của bạn
Ý anh là gì với nó không hoạt động? Nó có ngủ ngắn hay dài hay không? Đầu ra của std :: cout line với các nanosec là gì? – Nobody
Bạn nói đúng. Tôi đã chỉnh sửa bài đăng với mô tả tốt hơn. Cảm ơn bạn. – Emer
Bạn đã thử liên kết chương trình với thông tin gỡ lỗi để tăng cường và xem điều gì đang xảy ra khi đang ngủ? Đối với tôi, nó nghe có vẻ như một sự chờ đợi bận rộn, rõ ràng là không có khả năng nào khác để ngủ cho nano giây bởi vì điều đó vượt xa giới hạn của lịch trình. Có lẽ vòng lặp chờ đợi không bao giờ trả về vì một lý do nào đó. – Nobody