2011-09-01 34 views
5

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

+2

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

Trả lời

12

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();

+0

Ngừng tạm dừng là một. – MarkR

+0

Bạn không cần vòng lặp vô hạn, chỉ cần sử dụng 'pause();'. – boramalper

+1

@boramalper: Các vòng lặp là cần thiết vì 'tạm dừng' trả về tín hiệu. –

8

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.

+0

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. –

+0

Đó là một giải pháp tuyệt vời, Chris! Cảm ơn! – MetallicPriest

+1

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. –

4

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.

1

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.)

Các vấn đề liên quan