Sono in fase di aggiornamento di alcuni codici C++ legacy a C++ 11 sotto Linux utilizzando gcc. Quando ho cercato di stabilire delle priorità, ho trovato la seguente domanda. Potrebbe esserci qualche vantaggio nello scambio di una chiamata a usleep
con una chiamata a std::this_thread::sleep_for
? Nel codice di cui sto parlando il thread in esecuzione dovrebbe attendere un periodo molto breve. Quindi non ho bisogno di funzionalità avanzate come l'interruzione del sonno.Devo scambiare il sonno con sleep_for
risposta
Sì. std::this_thread::sleep_for
è specificato dallo standard C++ 11 ed è quindi una soluzione portatile su qualsiasi sistema con un compilatore C++ 11 e una libreria standard.
usleep
è specificato da POSIX.1-2001 (e dichiarato obsoleto!), Il che significa che può essere utilizzato (in modo affidabile) solo su sistemi conformi a POSIX.
POSIX.1-2008 rimuove le specifiche di usleep
, a favore di nanosleep
. Solo per questo motivo, std::this_thread::sleep_for
è una scelta molto migliore.
(Vedere http://linux.die.net/man/3/usleep per dettagli).
Capisco che preferirei le funzioni conformi allo standard rispetto alle funzioni POSIX. Ma dovrei aspettarmi effetti collaterali? Potrebbe dormire_per comportarsi diversamente da noi? Potrebbe esserci un beneficio o penalità per le prestazioni? –
Non per quanto posso vedere. Entrambi sono specificati per dormire per _almeno_ la durata specificata (vale a dire potrebbe essere più lungo, a seconda della pianificazione, ecc.) – Andrew
Per quanto riguarda i problemi di prestazioni, l'unica linea d'azione ragionevole è quella di _profile_ le due soluzioni. Non riesco a immaginare che ci sarebbe una differenza significativa tra i due; non paragonato al tempo di attesa, comunque. – Andrew
- 1. Interruzione thread a lungo sonno
- 2. std :: :: this_thread sleep_for() e GCC
- 3. Scambiare lettere con espressione regolare
- 4. interrompere il sonno in bash con una trappola segnale
- 5. come svegliare il telefono Android dal sonno?
- 6. Capybara richiede il sonno per funzionare?
- 7. pitone - segnali Facendo tra il sonno chiama
- 8. std :: this_thread :: yield() vs std :: this_thread :: sleep_for()?
- 9. sonno per millisecondi
- 10. Come scambiare gli oggetti ListView con l'animazione?
- 11. Scambiare Endianness in Objective-C?
- 12. sonno Discussione e servizi Windows
- 13. il sonno dal thread principale viene generato InterruptedException
- 14. Scatola del Vagabondo rotta dopo il sonno/spegnimento
- 15. Come scambiare due variabili?
- 16. C# Timer o Thread. Sonno
- 17. Come rilevare iPhone/Android svegli dal sonno con javascript
- 18. Il sonno/nanosleep funziona utilizzando uno schema di attesa intenso?
- 19. Esce il programma di blocco del sonno? Come viene implementato?
- 20. SHOW PROCESSLIST al comando di MySQL: il sonno
- 21. Come scambiare valori in NSMutableArray?
- 22. Amazon EC2: consente di scambiare il dispositivo di archiviazione dell'istanza di root con il dispositivo EBS
- 23. Qual è il modo più semplice per scambiare il char in una stringa con Python?
- 24. Multithreading, quando cedere rispetto al sonno
- 25. Scambiare il pulsante sinistro e destro del mouse in .NET
- 26. Prevenzione del sonno profondo iOS 5
- 27. Scambiare un widget con un altro in Qt
- 28. Interactive Emacs Lisp funzionare per scambiare due parole con l'altro
- 29. Come scambiare i frammenti con layout diversi in Android?
- 30. Il modo più semplice per scambiare due file in bash
Sì, migliorerà la portabilità del codice. –
Ogni volta che si modifica il codice si corre il rischio di introdurre un bug, quindi, se non si è rotto, non risolverlo. Tuttavia, se si sta risolvendo la funzione, comunque, perché non passare a un codice standard più portatile? – Galik