2015-10-01 16 views
5

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

+0

Sì, migliorerà la portabilità del codice. –

+0

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

risposta

9

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

+0

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

+0

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

+0

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

Problemi correlati