libcurlを使用してCに小さなダウンロードマネージャを作成していて、面白い問題が発生しました。私は、このメインループを発見したら、それは私がきちんと今までどのようにcurl_multi_perform
作品を理解していなかったと思われ、実際には毎秒ハンドルあたり16 KiBのダウンロード:ステータスを表示して1つのメインループでダウンロードを実行する
while (1) {
int cmp_rem;
j_recount_speeds();
j_handle_completed();
j_handle_waiting();
curl_multi_perform(j_curlm, &cmp_rem);
j_status();
sleep(1);
}
を私はマルチインターフェースを含むいくつかのexamples on cURL's websiteを見ていたし、物事を行う正しい方法はソケットファイル記述子のselect
へ、curl_multi_perform
を一度呼び出すことであることを発見しました。
でも、私は、一定の時間間隔でj_recount_speeds
、j_handle_completed
、j_handle_waiting
とj_status
を実行できるようにしたいです。 1つのメインループでcurl_multi_perform
で何をする必要があるのでしょうか?別のスレッドを使用する必要がありますか?
'curl_multi_perform'の文脈で' select'がどのように動作するのか詳しく説明できますか?私はこの分野ではあまり慣れていないので、どのように動作するのか、どのようにコードを修正するのかは分かりません。 –
http://curl.haxx.se/libcurl/c/curl_multi_perform.htmlに従って、curl_multi_fdset(http://curl.haxx.se/libcurl/c/curl_multi_fdset.html)を呼び出して、あなたが望むfdsetsを取得します次にselect()に渡します。簡単な例はすぐに上に掲載されます。 – tbert
答えをありがとう。私は今はかなり忙しいですし、私のコードではじめる機会がありませんので、私はあなたの答えを受け入れる前にしばらく時間を取って事前にお詫びします。 –