0

セカンダリ スレッドにh: TIdHTTPコンポーネントがあり、URL からヘッダーを取得しています。同時にユーザーがキャンセルをクリックすると、メイン スレッドは実際にIndyコンポーネントを切断しようとします。thrd.h.Disconnect メインスレッドから呼び出しても安全ですか? ( whileh:TIdHTTPは public として宣言されているため、メインスレッド内でアクセスできます)

いつでも安全ならCancel、スレッド内にメインスレッドから直接呼び出せる関数を書いてもいいですか?

前もって感謝します

4

2 に答える 2

2

はい、Disconnect()ワーカースレッドが同じソケットを介したデータの読み取り/書き込みでビジー状態のときに、メインスレッドはソケットを呼び出すことができます。読み取り/書き込み操作では、スレッドが必要に応じてキャッチまたは無視できるという例外が発生します。

スレッドが終了している場合は、イベントハンドラーをイベントに割り当てて、TIdHTTP.OnWorkwithなどの例外を発生させることもできます。SysUtils.Abort()

于 2012-07-24T18:07:25.323 に答える
2

「安全」の意味によって異なります:) TidHTTP は、そのソケットがその下から取り出されると、セカンダリ スレッドで例外を発生させます。それをキャッチして処理する (ログに記録する、表示する、または単に無視する) 場合は、問題ありません。

スレッド/ソケット/その他のオブジェクトの「キャンセル」メソッドも問題ないはずです。その後、TidHTTP コンポーネントをプライベート フィールドとして保持できます。

于 2012-07-24T15:13:24.753 に答える