2010-12-23 28 views
3

是否可以寫入();函數非阻塞而不使用線程?如何執行非阻塞寫入設備?

short buffer[BUFFER_LEN]; 
int readcount; 

while ((readcount = sounds[index].read(buffer, BUFFER_LEN))) 
    write(audio_device, buffer, readcount * sizeof(short)); 

該聲音播放,但它阻止程序,直到它完成播放。

+0

是的,我認爲有可能在沒有線程安全的情況下編寫函數可能會導致不同的行爲,如果同時其他線程使用相同的信息......! – 2012-10-16 08:52:59

回答

3

使用fcntl設置文件的O_NONBLOCK標誌可能會起作用,但您需要做好處理部分寫入和EWOULDBLOCK錯誤的準備。

+0

我添加了O_NONBLOCK標誌,但這只是扭曲了聲音。猜猜我將不得不使用線程。 – 2010-12-23 04:14:46