0

私はここで WSAAsyncSelect と NET についてたくさんの質問をしました。数か月前、私は報奨金に 500 担当者を費やし、自分で答えました (ラッパーを作成しました)。最終的に、フレームワークの winsock に慣れました。

今日、私はアンマネージ言語について質問しています。悪い点は、ソケットを使って物事を行うフレームワークの方法を見逃していることです.私は自分のプロジェクトを Delphi で書いていますが、C のような言語を理解しているので問題ありません。私は自然なものが大好きなので、純粋なコードのみを提案しないでください。:)

別の非表示フォームを作成し、そこにメッセージ ループを設定して、AsyncSelect を適切に使用することをお勧めします。

さて、私の質問は簡単です:私は自分の人生を楽にするために書いたwinsock関数全体をその隠しフォーム内に配置し、WSaAsyncSelectをそのハンドルで設定しました.メッセージループもそこにありますが、私は子クラスを書きました(多くのクラス、巨大なコード)、親クラスはその隠しフォームです。

WSAAsyncSelect はスレッドセーフですか? これは物事を遅くしますか(私がクラスで行ったこと)?

メッセージ ループの外側にスレッドを作成する必要がありますか?

AsyncSelect を適切に使用するためのその他のヒントをいただければ幸いです。

編集:誤解を避けるために、私は AsyncSelect() について直接尋ねています。私が取り組んでいるプロジェクトには、2 つのサーバーと 1 つのクライアントが必要ですが、その呼び出しでうまく処理できると思います。

4

1 に答える 1

1

別の非表示フォームを作成し、そこにメッセージ ループを設定して、AsyncSelect を適切に使用することをお勧めします。

WinSock に直接コーディングしていますか、それとも VCL の TClientSocket および TServerSocket コンポーネントを使用していますか? 後者の場合、彼らはすでに内部で WSAAsyncSelect() を処理しています (そうです、彼らは独自の隠しウィンドウを使用しています)。

WSAAsyncSelect はスレッドセーフですか?

はい。

これは物事を遅くしますか(私がクラスで行ったこと)?

クラスが何をしているのかを実際に説明していません。

メッセージ ループの外側にスレッドを作成する必要がありますか?

いいえ。ただし、必要に応じてソケットを複数のスレッドで使用できます。ただし、ソケット メッセージは、WSAAsyncSelect() に渡されたウィンドウを所有するスレッドによってのみ処理されます。

于 2009-07-15T23:52:00.223 に答える