2013-09-24 68 views
0

我有一個使用不同線程進行不同類型作業的進程。避免在這種情況下忙於等待

一個這樣的線程必須以非阻塞的方式發送推送通知(所以我將使用libcurl,因爲多接口和SSL支持)。主線程必須將作業傳遞給worker,並且考慮使用apache apr消息隊列來傳遞消息。因爲在同一個線程,我必須檢查傳入的消息和捲曲的可用性處理我想我會用這樣的:

while (1) 
{ 
    while (apr_queue_try_pop(queue, &msg) == APR_SUCCESS) 
    { 
     // do something with the message 
    } 

    // perform a select or poll in the curl multi handle 
    // treat the handles that are available for reads/writes 
} 

在線程啓動功能。

這是一種忙碌的等待,有沒有更好的解決方案?

使用C99和Linux x86_64。

回答

0

很難正確回答你的問題,只是沒有足夠的信息。但是,如果您顯示的代碼是工作者代碼,即在線程中啓動,並且需要推送通知的頻率很高,那麼我不會看到這樣做的原因。至於你的問題這是一種忙碌的等待,有沒有更好的解決方案?我通常會做一些事情,一旦它負責完成的任務完成,例如使用睡眠(1000),就會導致線程閒置。線程時間片的其餘部分未使用循環。像這樣:

while (1) 
{ 
    while (apr_queue_try_pop(queue, &msg) == APR_SUCCESS) 
    { 
     // do something with the message 
    } 

    // perform a select or poll in the curl multi handle 
    // treat the handles that are available for reads/writes 
    Sleep(1000); 
} 
相關問題