私は現在CFReadStreamHasBytesAvailable
で新しいデータのポーリング私CFReadStream
です。CFReadStreamHasBytesAvailableポーリング - ベストプラクティス
(まず、いくつかの背景:私は私自身のスレッドをやっていると私は実行ループのものを台無しに/必要性を望んでいないので、クライアントコールバックのものは本当にここには適用されません)。
私の質問は次のとおりです。ポーリングの受け入れ方法は何ですか?
Apple's documentationはあまり役に立ちません。
「お待ちください」とお勧めします。
while(!done)
{
if(CFReadStreamHasBytesAvailable(readStream))
{
CFReadStreamRead(...) ... bla bla bla
} else {
usleep(3600); // I made this up
sched_yield(); // also made this up
continue;
}
}
がusleep
とsched_yield
「十分に良い」:私は現在ただの線に沿って何かをやっていますか?そこにはusleep
で寝るための「良い」番号がありますか?
(これは私自身のスレッドで実行されているので、私はCFReadStreamRead
でブロックすることができます - これは素晴らしいですが、アップロードの進捗状況とダウンロードの進捗状況にも悩まされていますので、助けてください...)。
すべての洞察が高く評価されます - ありがとう!
アップロードとダウンロードのスレッドは別ですか? – frankodwyer
各リクエストには効果的に独自のスレッドがあります。 – atebits
多分私が理解していないいくつかの要件がありますが、アップロードとダウンロードが自分のスレッドに割り当てられている場合、問題は解決しますか?つまり、ストリームを1つのスレッドに読み込ませ、ストリームに1つのスレッドを書き込み、ブロックします。ただし、それらを同期させる必要があります。 – frankodwyer