0

さまざまな種類のジョブを作成するためにさまざまなスレッドを使用するプロセスがあります。

そのようなスレッドの 1 つは、ブロックしない方法でプッシュ通知を送信する必要があります (そのため、マルチ インターフェイスと SSL サポートのために libcurl を使用します)。マスター スレッドはワーカーにジョブを渡す必要があり、メッセージの受け渡しに 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 を使用。

4

1 に答える 1

0

あなたの質問に正確に答えるのは難しいです。十分な情報がありません。しかし、表示しているコードがワーカー コードである場合、つまりスレッドで起動され、通知を頻繁にプッシュする必要がある場合、これが機能しない理由はわかりません。あなたの質問については、これは待っているのが忙しいのですが、より良い解決策はありますか? 私は通常、sleep(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);
}
于 2013-09-24T15:01:41.427 に答える