問題タブ [tthread]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - Delphiウェブブラウザはtthreadオブジェクトのすべてのリンクを取得します
tthreadオブジェクトでコードを実行するのに問題があります。URLに「http://www.ebay.com/itm/」が含まれている場合は、twebbrowserのすべてのリンクを調べて、メモにコピーすることになっています。コードはメインフォームでは完全に機能しますが、tthreadオブジェクトでは機能しません。
私のコード:
私が得ているエラー
モジュールmshtml.dllのアドレスxxxxxxでのアクセス違反
読んでくれてありがとう、そしてすべての返信。
c++ - 非ブロッキングモードでTThread内でTClientSocketを使用すると、OnConnectイベントが発生しません
TClientSocket
マルチスレッドC++Windowsアプリケーション内で非ブロッキングモードでBorlandsコンポーネントを利用しようとしています。複数のスレッド(から派生したクラスTThread
)を作成しており、それぞれが独自のTClientSocket
オブジェクトを作成しています。次に、スレッドクラスのメンバー関数を割り当てて、ソケットのOnConnect
、OnDisconnect
およびイベントのイベントハンドラーとして機能させます。OnSocketError
ここで私が抱えている問題は、TClientSocket::Open()
関数内から関数を呼び出すたびにTThread::Execute()
、OnConnect
イベントが発生しないことです。ただし、関数が呼び出されるOpen()
前にVCLスレッドから関数を呼び出すTThread::Execute()
と、すべてのイベントが発生し、スレッドとソケットの組み合わせを自由に使用できます。今、私はそれを言うドキュメントで何も読んでいませんTClientSocket
スレッド内で使用する場合、非ブロッキングモードで使用するべきではありませんが、このクラスを使用しようとしている方法に概念的に何か問題があるように思われます。Borlandのドキュメントはこの件に関して非常に貧弱であり、これらのコンポーネントは現在非推奨になっているため、信頼できる情報を入手するのは困難です。非推奨になっていますが、私が持っているBuilder 6パッケージには代替手段がないため、これらを使用する必要があります。TThread
正しい/間違った使用方法とノンブロッキングTClientSocket
の組み合わせがあるかどうか誰かに教えてもらえますか?VCLスレッドの一部として使用する際に問題が発生したことはなく、TServerSocketを使用する際に問題が発生したこともありません。また、一部のイベントが発生しない理由を本当に理解できません。
c++ - 複数の TClientSocket インスタンスを使用して Windows ハンドル リークを引き起こす C++ アプリケーション
Borland/EmbarcaderoTClientSocket
コンポーネントを使用して、明らかなハンドル リークが発生しました。TThread
複数のインスタンスを作成するアプリケーションがあり、それぞれがTClientSocket
オブジェクトを動的に作成し、ターゲットに接続していくつかのメッセージを送信してから削除します。その後TThread
、インスタンスは ( のFreeOnTerminate = true
設定を使用して) 削除されます。これが非効率的であることはわかっていますが、アプリケーションのニーズに完全に適合していますTThread
。同時に存在できるインスタンスの最大数は 32 に制限されています。タスクマネージャー経由。問題を切り分けるために、同じ問題をシングル スレッドの意味で適用し、動的にTClientSocket
メイン VCL スレッドの 1 つのループ内で終了すると、オブジェクトが再び削除されます。これは、同じハンドル漏れの問題を示します。コンポーネントが非推奨であることはわかっていますし、自分が行っていることが非効率的であることもわかっていますが、ハンドル リークが発生する理由がわかりません。TClientSocket
このハンドル リークをなくすためにオブジェクトを削除する前に、何かする必要があることはありますか?それとも、これはコンポーネントのバグですか? OnConnect
OnDisconnect
非ブロッキング モードでソケットを使用し、イベント ハンドラをおよびに割り当てていますOnSocketError
。
delphi - FreeOnTerminate = True を使用した TThread の Delphi 単体テスト
FreeOnTerminate = True の場合に TThread の子孫の Delphi DUnit テストを作成する最良の方法は何ですか? TThread の子孫は、テストする必要がある参照を返しますが、スレッドがテストで終了するのを待つ方法がわかりません...
どんなアイデアでも大歓迎です。
デルファイ 2010。
delphi - MessageBox が同期スレッドでアプリケーションをブロックしないのはなぜですか?
TThread クラスのメソッドを理解して知っている限り、コードを同期すると、実際にはメインのアプリケーション スレッドで実行されます (タイマー/ボタンクリックなどのように)。 MessageBox はメイン アプリケーションをブロックしませんが、スリープは期待どおりにブロックします。何故ですか?
multithreading - スレッド変数を終了して NULL に設定する
子孫を扱うとき、TThread
私は基本的に選択肢があります:
- 子孫オブジェクトを削除しますが、設定
FreeOnTerminate
しませんtrue
TThread
NULL
- 手動で行い、自分で削除するという混乱をすべて経験します
基本的に必要なのは、スレッドが実行されているかどうかを判断する方法なので、次のことを行いました。
このコードはそのまま動作します。私の質問は次のとおりです。
これを簡単にする方法はありますか?
MyThread
開始/再起動の次の呼び出しまでオブジェクトが存在しないように、完了後に NULLに設定する必要がありますか?FreeOnTerminate
オブジェクトを削除するため、これを trueに設定すると実行できません。オブジェクトにアクセスしようとすると、例外が生成されます(キャッチできますが、それはばかげています)。MyThread を初期化または再起動する前に、実行が完了しているかどうかを知る必要があるだけです。スレッドを終了せずに再起動できますか (プログラムが終了するまでオブジェクトを削除する必要はありません)。
delphi - TThread コンストラクターでの Free Pascal 2.6.2 エラー
Free Pascal 2.6.2 コンパイラ (Delphi モードを使用) は、
次のエラー メッセージが表示されます。
を使用して修正しました
2.6.2 での変更が原因のようです。TThread には、オプションの 2 番目の引数を持つコンストラクター宣言があります。
multithreading - 複数の TThread インスタンス
独立して実行でき、完了後に終了して解放できる TThread クラスがあります。私は終了を検討し、すべてがうまくいきました。問題は、ユーザーが同時にアクティブにする SYNCHRONOUS スレッドの数を選択して選択できる機能を追加したいということです。例は次のとおりです。
- プログラムは合計 100 のタスクを実行する必要があります。
- ユーザーは、すべてのタスクを完了するために同時に実行する必要がある 3 つのスレッドを選択します。
最初に行った手順は、TThread クラスの 3 つのインスタンスを作成し、それらを for ループで再開することでした。したがって、3 つのスレッドが実行されます。最初のスレッドが完了 (または終了) したら、別の新しいインスタンスを作成して再開する必要があります。
この点に行き詰まり、どうすればこれを実現できるのだろうか。どんなアドバイスも役に立ちます。
編集:いくつかのコード