0

私は3つのクラスがあります

  • クラスを見る
  • クラスのリクエスト
  • 応答クラス

Iaは、ビュークラスからリクエストクラスの2つのメソッドを次のように呼び出します。

[eRequests GetM:IdString];
[eRequests GetY:IdString SubID:subIdString];

私のスレッドは最初の行の実行を開始し、そのプロセスの途中で取得し、最初の要求が戻る前に次の要求が開始されます。

これを防ぎたいのですが、どうすればいいのかよくわかりません。

私を止めているのは、このようなリクエストがこれらのステップを通過することです

  1. リクエストメソッドの呼び出し-ViewClass内
  2. パケットを作成してリクエストを送信し、dbから返されたデータを受信します-Requestclass内
  3. ResponseClassにデータを送信します-Requestclass内
  4. データをデコードし、関連情報をViewClassのレシーバーメソッドに送り返します-ResponseClass内

私がこだわっているのは、スレッドがビュークラスに戻ったときですが、別のメソッド内で2番目のリクエストに戻るにはどうすればよいですか?

とにかく、誰かが私が一度に1つのメソッド呼び出しを実行できるようにするための助けを提供できれば、それは非常にありがたいです!

4

1 に答える 1

0

あなたの説明は非常に紛らわしいです。投稿されたコードを実行している「マイスレッド」とは何ですか?リクエストスレッドですか、それともレスポンススレッドですか?なぜ「2番目のリクエストに戻る」必要があるのですか?手順1〜4は、ViewにコールバックしているのはResponseオブジェクトであることを説明しようとしています。次の文では、Requestについてもう一度話しますか?それで、それはどのスレッドですか?

あなたが使用している言葉から、私はあなたが単純な競合状態が起こっていると推測しています。これは、eRequestが共有リソースであり、そのため、ミューテックスする必要があることを意味します

@synchronized(eRequests) {
 [eRequests GetM:IdString];
 [eRequests GetY:IdString SubID:subIdString];
}

しかし、私はまだ「2番目の要求に戻る」部分を理解していません。

于 2012-11-01T14:36:50.173 に答える