Tôi muốn tạo một luồng chỉ trong một khoảng thời gian không xác định. Lý do tôi muốn làm điều này là bởi vì chương trình của tôi chỉ thực hiện hành động khi nó nhận được tín hiệu và không có gì để làm trong chuỗi chính. Do đó, tất cả xử lý được thực hiện bên trong trình xử lý tín hiệu. Làm thế nào tôi có thể ngủ trong một khoảng thời gian vô hạn?Ngủ một sợi chỉ trong một khoảng thời gian vô hạn trong Linux
Trả lời
Tôi tin rằng bạn đang tìm kiếm pause
chức năng:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/pause.html
Bạn có thể làm một cái gì đó như: for (;;) pause();
Ngừng tạm dừng là một. – MarkR
Bạn không cần vòng lặp vô hạn, chỉ cần sử dụng 'pause();'. – boramalper
@boramalper: Các vòng lặp là cần thiết vì 'tạm dừng' trả về tín hiệu. –
Nếu bạn chỉ đang làm điều gì đó trên một chuỗi khác, chỉ cần gọi pthread_join
trên chuỗi đó và nó sẽ chặn nhiều "mãi mãi". Bạn có thể đạt được hiệu quả tương tự bằng cách sử dụng biến điều kiện.
Tôi đồng ý với Chris. Anh ta đề nghị bạn có chủ đề chính chờ cho (các) chuỗi con thoát ra, sau đó thoát khỏi chính nó. Điều này sẽ không chỉ làm những gì bạn muốn, nhưng ngăn chặn zombie nếu chủ đề con chết hoặc bị giết. –
Đó là một giải pháp tuyệt vời, Chris! Cảm ơn! – MetallicPriest
Chủ đề không thể bị giết, và không trở thành "thây ma" theo cùng nghĩa với quy trình. Nếu bạn không quan tâm để tham gia một chủ đề, chỉ cần tách nó ra để bắt đầu, do đó bạn không phải lo lắng về việc làm sạch bộ mô tả luồng. –
Sử dụng ẩn dụ!
Đề tài của bạn bị chặn trên semaphore bằng cách sử dụng sem_wait
. Một khi bạn cần phải đánh thức tín hiệu chủ đề của bạn semaphore bằng cách sử dụng sem_post
từ chủ đề khác.
POSIX cung cấp sigsuspend
chức năng để chờ đợi một tín hiệu. (Như được đề cập trong một câu trả lời khác, pause
cũng hoạt động.)
- 1. Ngủ một sợi chỉ tăng cho một số nano giây
- 2. Sử dụng một khoảng thời gian thay đổi trong một khoảng thời gian trong Postgres
- 3. Tách một khoảng thời gian thành nhiều khoảng thời gian
- 4. Tạo ra một sợi chỉ trong python
- 5. Thời gian giới hạn một phương thức trong C#
- 6. Joda Thời phút trong một thời gian hoặc khoảng
- 7. Trì hoãn một hành động trong một khoảng thời gian
- 8. Linux để chạy kịch bản trong khoảng thời gian
- 9. Chạy một hàm trong khoảng thời gian trong jQuery
- 10. Nhận mỗi giờ trong một khoảng thời gian
- 11. Làm việc với một khoảng thời gian trong Javascript
- 12. Khóa bảng SQL trong một khoảng thời gian
- 13. Tăng ngày theo một khoảng thời gian
- 14. Làm thế nào để quản lý một dự án khi nó bị đóng băng trong một khoảng thời gian vô hạn
- 15. Theo dõi thời gian một lệnh có trong UNIX/LINUX?
- 16. Một quadtree vô hạn vô hạn được gọi là gì?
- 17. Sẽ xử lý với nhiều chủ đề trên Linux có nhiều thời gian cpu hơn quá trình với một sợi?
- 18. Thuật toán để ánh xạ một khoảng thời gian đến một khoảng nhỏ hơn
- 19. jquery hover chỉ hoạt động nếu lơ lửng trong một khoảng thời gian nhất định
- 20. Khoảng thời gian thực Scala, Khoảng thời gian Int
- 21. cách dừng vòng lặp javascript trong một khoảng thời gian cụ thể?
- 22. Khoảng thời gian LocalDate trong thời gian Joda
- 23. Chạy một đoạn mã trong một khoảng thời gian nhất định trong C#?
- 24. Thêm một khoảng thời gian để một khoảnh khắc (moment.js)
- 25. Giết chủ đề sau một số giới hạn thời gian được chỉ định trong Java
- 26. Khoảng thời gian trong mục tiêu C
- 27. Chuyển đổi một phao thành một khoảng thời gian
- 28. d3.js chuỗi thời gian cuộn vô hạn
- 29. Tạo một GUID ngẫu nhiên trong C# trong một khoảng thời gian cụ thể
- 30. Chèn tất cả các ngày trong một khoảng thời gian trong một bảng
Bạn có thực sự đang sử dụng chuỗi hoặc chỉ là tín hiệu không? Nếu chủ đề, các chủ đề khác là gì và chúng đang làm gì? (Nếu bạn đang trộn các tín hiệu và chủ đề thì cần thêm một số công việc để làm, nhưng nếu bạn chỉ sử dụng "chuỗi chính" có nghĩa là một phần của chương trình không thực hiện trong trình xử lý tín hiệu, điều đó khác và ngụ ý answer) – Random832