Tôi đang ở giai đoạn nâng cấp một số mã C++ cũ lên C++ 11 trong Linux bằng gcc. Khi cố gắng đặt ưu tiên, tôi đã đưa ra câu hỏi sau. Có thể có bất kỳ lợi thế nào trong việc trao đổi cuộc gọi đến usleep
với một cuộc gọi đến std::this_thread::sleep_for
không? Trong mã tôi đang nói về thread đang chạy được cho là phải đợi trong một khoảng thời gian rất ngắn. Do đó tôi không cần bất kỳ tính năng nâng cao nào như làm gián đoạn giấc ngủ.Tôi có nên đổi ngủ với sleep_for
Trả lời
Có. std::this_thread::sleep_for
được chỉ định theo tiêu chuẩn C++ 11, và do đó là giải pháp di động trên bất kỳ hệ thống nào có trình biên dịch C++ 11 và thư viện chuẩn.
usleep
được chỉ định bởi POSIX.1-2001 (và tuyên bố lỗi thời!), Có nghĩa là nó chỉ có thể được (đáng tin cậy) được sử dụng trên các hệ thống tuân thủ POSIX.
POSIX.1-2008 loại bỏ đặc điểm kỹ thuật của usleep
, có lợi cho nanosleep
. Vì lý do này một mình, std::this_thread::sleep_for
là một sự lựa chọn tốt hơn nhiều.
(Xem http://linux.die.net/man/3/usleep để biết chi tiết).
Tôi hiểu rằng tôi nên sử dụng các chức năng tuân thủ tiêu chuẩn hơn các chức năng POSIX. Nhưng tôi có nên mong đợi bất kỳ tác dụng phụ nào không? Có thể sleep_for cư xử khác với giấc ngủ? Có thể có lợi ích hoặc hình phạt về hiệu suất không? –
Không xa như tôi có thể thấy. Cả hai được quy định để ngủ cho _at ít nhất_ thời gian quy định (tức là nó có thể dài hơn, tùy thuộc vào lịch trình, vv) – Andrew
Đối với mối quan tâm về hiệu suất, quá trình hành động hợp lý duy nhất là _profile_ hai giải pháp. Tôi không thể tưởng tượng có sự khác biệt đáng kể giữa hai người; không được so sánh với thời gian chờ đợi. – Andrew
- 1. Windows 7: vượt qua C++ std :: this_thread :: sleep_for
- 2. Xtst và chúng tôi ngủ
- 3. Tôi có nên chuyển đổi từ MooTools sang jQuery không?
- 4. Dừng đề tài ngủ dài
- 5. Python - Có thể (hoặc nên) tôi thay đổi os.path.sep?
- 6. Tôi có nên sửa đổi nguyên mẫu của chuỗi không?
- 7. Tôi có nên tham gia Android Studio hay tôi nên gắn bó với Eclipse không?
- 8. Những gì tôi nên sử dụng giấc ngủ hoặc hẹn giờ
- 9. Tôi có thể ngăn điện thoại ngủ trên trang web
- 10. Tôi có nên chuyển đổi Markdown được lưu trữ sang HTML hay tôi nên lưu trữ HTML không?
- 11. Tôi có nên bắt đầu với Python 3.0 không?
- 12. Tôi có nên sử dụng wtforms với giá treo?
- 13. Tôi có nên đi với Varnish thay vì nginx không?
- 14. Tôi có nên bắt EmptyResultDataAccessException không?
- 15. Làm thế nào để std :: thread ngủ
- 16. Tôi có thể làm điều đó đơn giản hơn nhiều với Reflection. Tôi có nên không?
- 17. Tôi có nên removeTarget trước khi tôi addTarget
- 18. Tôi có nên sử dụng HttpRuntime.Cache không?
- 19. Tôi có nên vứt bỏ Mutex không?
- 20. Tôi có nên cache System.getProperty ("line.separator") không?
- 21. Tôi có nên đợi AutoView không?
- 22. Char.Equals vs Object.Equals - ReSharper gợi ý rằng tôi nên sử dụng Object.Equals. Tôi có nên không?
- 23. Tôi có nên sử dụng jQuery.each() không?
- 24. Tôi có nên sử dụng ProGuard không?
- 25. Tôi có nên sử dụng ScriptSharp
- 26. Tôi có nên preallocate std :: stringstream?
- 27. Tôi có nên triển khai onRetainNonConfigurationInstance không?
- 28. Tôi có nên đặt errno không?
- 29. Tôi có nên làm lambdas tĩnh không?
- 30. Tôi có nên khóa 'sự kiện' không?
Có, nó sẽ cải thiện tính di động của mã. –
Mỗi khi bạn thay đổi mã, bạn có nguy cơ giới thiệu một lỗi như vậy, nếu nó 'aint đã phá vỡ không sửa chữa nó. Tuy nhiên, nếu bạn đang sửa chữa các chức năng anyways lý do tại sao không di chuyển đến xách tay hơn, mã tiêu chuẩn? – Galik