ist es möglich, write(); Funktion blockiert nicht ohne Threads?Wie wird ein nicht blockierendes Schreiben auf das Gerät durchgeführt?
Die Sounds spielen, aber es blockiert das Programm bis zum Ende der Wiedergabe.
ist es möglich, write(); Funktion blockiert nicht ohne Threads?Wie wird ein nicht blockierendes Schreiben auf das Gerät durchgeführt?
Die Sounds spielen, aber es blockiert das Programm bis zum Ende der Wiedergabe.
Verwenden Sie die fcntl
, um die O_NONBLOCK
Flag für die Datei wird wahrscheinlich funktionieren, aber Sie müssen bereit sein, mit partiellen Schreiben und Fehler umzugehen.
Ich habe O_NONBLOCK-Flag hinzugefügt, aber das verzerrt nur die Sounds. Ich denke, dass ich dann Threads verwenden muss. –
Das liegt daran, dass Sie den Rückgabewert von 'write' ignorieren. Wenn der Dateideskriptor nicht blockierend ist, kann "write" -1 zurückgeben, wobei "errno" auf "EWOULDBLOCK" gesetzt ist. In diesem Fall müssen Sie warten und das Schreiben später erneut versuchen. Und natürlich kann "schreiben" immer weniger als die angeforderte Anzahl von Bytes zurückgeben, die Sie zu schreiben versuchten. In diesem Fall müssen Sie den Rest gepuffert halten und später schreiben. –
Können Sie mir einen Beispielcode geben oder wo sollte ich lesen, sollte ich Umfrage verwenden? –
Ja, ich denke, dass es möglich ist, die Schreibfunktion ohne Thread Safe zu machen, kann ein anderes Verhalten verursachen, wenn gleichzeitig andere Threads dieselben Informationen verwenden ......! –