2013-03-12 90 views
0

我想用libev在C++中創建異步方法。如果需要,我可以傳遞一個回調方法作爲參數。如何用C++創建異步方法使用libev

例如

test(); 
printf("After test() method\n"); 

test()是一個異步的方法,所以test()完成其執行之前,必須執行下一printf()語句。

我嘗試使用libev對於這個簡單的例子:

void testCallback(struct ev_loop *loop, struct ev_io *watcher, int revents) 
{ 
    sleep(5); 
    ev_io_stop(loop, watcher); 
} 

int test() 
{ 
    struct ev_loop *loop = ev_default_loop(0); 
    ev_io watch; 

    ev_io_init(&watch, testCallback, 0, EV_READ); 
    ev_io_start(loop, &watch); 

    ev_run(loop, 0); 

    return 0; 
} 

int main() { 
    test(); 
    printf("After test() method"); 
    return 0; 
} 

在這個例子中,printf該事件循環已經停止後得到執行。這種功能是否可以使用libev?我用Google搜索,但沒有得到這種需求的例子。

回答

1

從代碼printf應該在循環停止後執行。測試不是異步,而是testCallback是異步。你可能誤解了邏輯。

+0

是的,'printf'在循環停止後執行。我的問題是如何實現這種異步功能?即使我知道了這一點_Test不是異步,而是testCallback是異步._你能說得有點細緻嗎? – Chaitanya 2013-03-13 05:44:31

+0

ev_run(loop,0);將不會返回它是一個永遠運行的循環。將printf移到回調函數中,並在結束之前執行。另外ev_io_stop(循環,觀察者)導致循環結束,所以它是一次性事件。如果您想要基於計時器的事件,請參閱以下鏈接http://linux.die.net/man/3/ev – 2013-03-13 06:13:26

+0

如果將printf語句放入回調函數中,則只有在調用回調函數後纔會執行printf語句。不管被調用的回調是什麼,我都希望printf執行。這就是我們所說的異步執行的意思嗎? – Chaitanya 2013-03-13 06:37:24