2016-09-17 7 views
1

は、私は次のコードを実行しようとした成功に戻って保持し、関数が受け取る最初の後に0を返す保つ:それは上の0を返すように、uv_runは永遠

while (true) 
{ 
    int res = uv_run(uv_default_loop(), UV_RUN_ONCE); 
    if (res == 0) 
     printf("ok\n"); 
} 

ループをリセットする方法はあります2番目の受信し、最初のものからの成功に立ち往生しませんか?

答えて

1

uv_runは、この場合は永遠に

成功を返す続け、0は成功を意味するものではありません。 I/Oの回ためポーリング:

UV_RUN_ONCE:
としてはuv_run(強調鉱山)のためhereを挙げます。この関数は、保留中のコールバックがない場合にブロックすることに注意してください。 終了時(アクティブなハンドルや要求が残っていない)にはが返されます。さらにコールバックが必要な場合はゼロ以外の値が返されます(将来はいつかイベントループを再度実行する必要があります)。

少なくとも1つのコールバックが存在する場合、関数呼び出しはブロックされず、関数呼び出しが実行されてから実行されます。それはI/Oを一度だけポーリングします。それはそのためのものです。あなたはそれが意味するものとは異なる働きをすることは可能でしょうか? - まあ、いいえ。
代わりにUV_RUN_DEFAULTを使用し、ハンドルを終了したらすべてのハンドルを閉じてループが終了し、関数呼び出しが返されるようにします。

+0

こんにちはskypjackと答えてくれてありがとう。私はlibuvを研究しようとしているので、ゲームのアーキテクチャに最適です。私はUIをブロックしないように、すべてのフレームと呼んでいます。これは正しい方法ですか?ハンドラを閉じて、フレームごとにもう一度それらを初期化するか、または他の方法がありますか? –

+0

@ Gabrielkotevいいえ、長時間の操作を行う場合は、単に終了しないでください。一例として、ポートでエコーするTCPハンドルは、サービスを提供したい限り、起動して実行する必要があります。私はlibuvのドキュメントを読むことをお勧めします、すべてが非常にうまく説明されています。 – skypjack