1

別のアプリケーションからデータを受信するために使用される API を作成しています。現在、関数はデータが受信されるまでブロックするように設計されています。私の考えでは、これにより、API を使用する開発者はマルチスレッドまたはある種のマルチプロセス設計を使用することが制限されます。したがって、関数がブロックするか、null を返し、再試行する前に数ミリ秒間スリープする方がよいでしょうか。

他のアプリケーションには、不明な期間、API を介して送信するデータがない場合があることに注意してください。

API は C++ で記述されています

4

6 に答える 6

3

コールバックを使用しないのはなぜですか?

于 2009-12-02T20:18:09.643 に答える
1

ユーザーがオプションのタイムアウト値を渡せるようにAPIを定義できます。タイムアウトが指定されていない場合、API関数は、動作と同じように無期限に待機しますselect()

于 2009-12-02T20:22:05.957 に答える
1

別のオプションを検討してください:非同期トランザクションを使用する-> aを発行し、をrequest提供callback addressticket idます。応答が利用可能になると、サービスはcallbacksアプリケーションのエンドポイントticket idと結果を返します;-)

可能な場合は、可能な限りブロッキングを回避する必要があります。


あなたが言うように:

他のアプリケーションには、不明な期間、APIを介して送信するデータがない可能性があることに注意してください。

この場合、同期インターフェースを使用すると、リソースが不必要に拘束されます。

于 2009-12-02T20:19:30.063 に答える
0

アプリケーションがO/S api関数read()を呼び出すとき、それがブロックされると思いますか?もちろん、少なくともデフォルトではそうします。状況によっては、ioctlを使用すると、プログラマーは動作を非同期に変更できます。これは、ネットワークアプリケーションで特に一般的です。

APIの内容についてはほとんど明らかにしていないので、次のことを検討してください。

  • APIユーザーがブロックされることは理にかなっていますか?つまり、戻るまでやることはほとんどありません。
  • APIのアプリケーションを作成している場合、それは何を期待しますか?APIを文書化するだけでなく、自分の教育用にいくつかのサンプルアプリケーションを作成する必要があります。
  • APIユーザーがAPIへのリクエストをマルチスレッド(またはフォークなど)しない理由はありますか?
于 2009-12-02T20:25:04.313 に答える
0

これがどの言語であるかは述べていませんが、API が何らかのイベントをリッスンまたはチェックしているように聞こえます。API のユーザーは、API をブロックまたはポーリングして、イベントが発生したかどうかを判断していますか?

コールバックを使用することは可能ですか? API のユーザーは、発生したイベントの通知を登録し、ライブラリがイベントを検出すると、コールバックを使用してすべてのリスナーに通知します。

于 2009-12-02T20:18:07.520 に答える
0

再利用可能なソリューションが必要な場合は、この CodeProject プロジェクト で示されているように、.NET で一般的ですが、C++ でも実装できる非同期設計の「パターン」を適用できます。

インターフェイス内の同じ機能に対して同期呼び出しと非同期呼び出しの両方を提供しても問題はありません。

個人的には、複数のリクエストを処理する必要がある場合 (たとえば、「BeginOperation」リクエストをキューに入れることができる場合)、またはインターフェイスに潜在的に非同期の操作が多数ある場合 (および標準化された柔軟なパターンが必要な場合) にのみ、これらの長さを使用します。一度に 1 つの要求しか処理できない場合は、通常はタイムアウトで十分です。

于 2010-01-14T11:17:37.163 に答える