arbeite ich durch ein Kapitel über iPhone Audio und haben über einen Abschnitt von Code kommen, dass ich nicht Sinn machen kann:Warum verwenden Sie select() anstelle von sleep()?
while (aqc.playPtr < aqc.sampleLen)
{
select(NULL, NULL, NULL, NULL, 1.0);
}
(Full code sample is on pages 163-166). Von dem, was ich von dem Code verstehe, wird das Audio in einem anderen Thread verarbeitet und die While-Schleife ist nur da, um zu verhindern, dass der Haupt-Thread beendet wird, während Audio noch verarbeitet wird.
Was ich nicht verstehe ist, warum select()
anstelle von sleep()
verwendet wird.
Von dem, was ich gelesen habe select()
wird verwendet, um Änderungen in I/O zu überwachen und es NULLs übergeben tut nichts sinnvolles. Ich habe den Code mit sleep()
ausgeführt und es funktioniert wie erwartet. (Mein Wissen von niedrigem Niveau POSIX ist fast nicht vorhanden.)
gruselig. Ich wusste nicht, dass die Leute immer noch diesen alten Trick benutzen. Und dies auf einer scheinbar neuen und glänzenden Architektur, wo viele andere Mittel zum "Schlafen" verfügbar sein sollten. Schade über den Programmierer/Schreiben eines solchen Codes. –
@JensGustedt nicht so beängstigend wie ein 'double' als Parameter zu übergeben, wenn die Funktion einen ** Zeiger ** auf ein' struct timeval' erwartet – JeremyP
@JensGustedt Dies ist eigentlich eine sehr sichere Art zu schlafen, weil sleep() nicht kann arbeiten z in einem Signalhandler. – LubosD