Voglio rendere un thread inattivo per un periodo di tempo indefinito. Il motivo per cui voglio farlo è perché il mio programma agisce solo quando riceve un segnale e non ha nulla da fare nel thread primario. Pertanto, tutta l'elaborazione viene eseguita all'interno del gestore di segnale. Come posso dormire per un tempo indefinito?Dormire un thread per un periodo di tempo indefinito in Linux
risposta
Credo che stai cercando per la funzione pause
:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/pause.html
Si potrebbe fare qualcosa di simile: for (;;) pause();
La pausa è quella giusta. – MarkR
Non hai bisogno di un loop infinito, usa solo 'pause();'. – boramalper
@boramalper: i loop sono necessari perché 'pause' ritorna sui segnali. –
Se stai facendo qualcosa su un'altra discussione, chiama semplicemente pthread_join
su quel thread e bloccherà praticamente "per sempre". È possibile ottenere lo stesso effetto usando una variabile di condizione.
Sono d'accordo con Chris. Sta suggerendo di avere il thread principale in attesa che il/i thread/i figlio/i per uscire, quindi di uscire da solo. Questo non solo fa ciò che vuoi, ma previene gli zombi se il filo bambino muore o viene ucciso. –
Questa è una soluzione geniale, Chris! Grazie! – MetallicPriest
I thread non possono essere uccisi e non diventano "zombi" nello stesso senso dei processi. Se non ti interessa unirti a un thread, basta staccarlo per iniziare in modo da non doverti preoccupare di ripulire il descrittore del thread. –
Utilizzare i semafori!
Il thread è bloccato su un semaforo utilizzando sem_wait
. Una volta che hai bisogno di riattivare il filo, segnala il semaforo usando sem_post
da un altro thread.
POSIX fornisce la funzione sigsuspend
ad attendere un segnale. (Come menzionato in un'altra risposta, anche lo pause
funziona.)
- 1. Ritardare un'azione per un periodo di tempo
- 2. Dividere un periodo di tempo in più periodi di tempo
- 3. Fai passare il thread alla fine dopo un certo periodo di tempo
- 4. Aggregazione per periodo di tempo in lubridato
- 5. Come "dormire" un programma Dart
- 6. WPF - Rileva il mouse per un determinato periodo di tempo
- 7. Come raggruppare DataFrame per un periodo di tempo?
- 8. Come nascondere un div dopo un certo periodo di tempo?
- 9. Limitazione del tempo di esecuzione di un programma in Linux
- 10. Filtrare i dati su un periodo di tempo in Fabric.io
- 11. Come dormire il thread in node.js senza influenzare altri thread?
- 12. Rails: acquisizione di un array di valori da un modello per un periodo di tempo
- 13. Come dormire o mettere in pausa un PThread in c su Linux
- 14. Come posso creare un IUSsype NHibnerate per un periodo di tempo in Sql Server 2008/2012?
- 15. In un database, è meglio memorizzare un periodo di tempo come data di inizio/fine, o una data di inizio e un periodo di tempo?
- 16. Reindirizza sito Web dopo un certo periodo di tempo
- 17. Come dormire in un QRunnable?
- 18. Javascript: chiama una funzione dopo un periodo di tempo specifico
- 19. Come denominare un thread in Linux?
- 20. Un thread può dormire per meno di mezzo milli secondi in Java/Other language?
- 21. Come avviare un'attività dopo un certo periodo di tempo?
- 22. richiesta in stallo per un lungo periodo di tempo in cromo
- 23. Statistiche thread per CPU in Linux
- 24. Qualsiasi modo di dormire su un punto di interruzione in C#/Visual Studio?
- 25. Trovare conteggio per un periodo in SQL
- 26. Java: funzione di data JPQL per aggiungere un periodo di tempo per un'altra data
- 27. Come dormire thread in Xamarin Android e iOS?
- 28. Tempo quantico per processo per thread
- 29. Come visualizzare HTML nel browser in modo incrementale per un lungo periodo di tempo?
- 30. Riferimento indefinito a Boost Thread
Attualmente stai utilizzando thread o solo segnali? Se i thread, quali sono gli altri thread e cosa stanno facendo? (Se stai mixando segnali e thread c'è del lavoro extra da fare, ma se stai usando "thread primario" per indicare la parte del programma che non è in esecuzione in un gestore di segnale, è diverso e implica un diverso risposta) – Random832