問題タブ [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.

0 投票する
1 に答える
1385 参照

delphi - Delphiウェブブラウザはtthreadオブジェクトのすべてのリンクを取得します

tthreadオブジェクトでコードを実行するのに問題があります。URLに「http://www.ebay.com/itm/」が含まれている場合は、twebbrowserのすべてのリンクを調べて、メモにコピーすることになっています。コードはメインフォームでは完全に機能しますが、tthreadオブジェクトでは機能しません。

私のコード:

私が得ているエラー

モジュールmshtml.dllのアドレスxxxxxxでのアクセス違反

読んでくれてありがとう、そしてすべての返信。

0 投票する
1 に答える
803 参照

c++ - 非ブロッキングモードでTThread内でTClientSocketを使用すると、OnConnectイベントが発生しません

TClientSocketマルチスレッドC++Windowsアプリケーション内で非ブロッキングモードでBorlandsコンポーネントを利用しようとしています。複数のスレッド(から派生したクラスTThread)を作成しており、それぞれが独自のTClientSocketオブジェクトを作成しています。次に、スレッドクラスのメンバー関数を割り当てて、ソケットのOnConnectOnDisconnectおよびイベントのイベントハンドラーとして機能させます。OnSocketErrorここで私が抱えている問題は、TClientSocket::Open()関数内から関数を呼び出すたびにTThread::Execute()OnConnectイベントが発生しないことです。ただし、関数が呼び出されるOpen()前にVCLスレッドから関数を呼び出すTThread::Execute()と、すべてのイベントが発生し、スレッドとソケットの組み合わせを自由に使用できます。今、私はそれを言うドキュメントで何も読んでいませんTClientSocketスレッド内で使用する場合、非ブロッキングモードで使用するべきではありませんが、このクラスを使用しようとしている方法に概念的に何か問題があるように思われます。Borlandのドキュメントはこの件に関して非常に貧弱であり、これらのコンポーネントは現在非推奨になっているため、信頼できる情報を入手するのは困難です。非推奨になっていますが、私が持っているBuilder 6パッケージには代替手段がないため、これらを使用する必要があります。TThread正しい/間違った使用方法とノンブロッキングTClientSocketの組み合わせがあるかどうか誰かに教えてもらえますか?VCLスレッドの一部として使用する際に問題が発生したことはなく、TServerSocketを使用する際に問題が発生したこともありません。また、一部のイベントが発生しない理由を本当に理解できません。

0 投票する
1 に答える
558 参照

c++ - 複数の TClientSocket インスタンスを使用して Windows ハンドル リークを引き起こす C++ アプリケーション

Borland/EmbarcaderoTClientSocketコンポーネントを使用して、明らかなハンドル リークが発生しました。TThread複数のインスタンスを作成するアプリケーションがあり、それぞれがTClientSocketオブジェクトを動的に作成し、ターゲットに接続していくつかのメッセージを送信してから削除します。その後TThread、インスタンスは ( のFreeOnTerminate = true設定を使用して) 削除されます。これが非効率的であることはわかっていますが、アプリケーションのニーズに完全に適合していますTThread。同時に存在できるインスタンスの最大数は 32 に制限されています。タスクマネージャー経由。問題を切り分けるために、同じ問題をシングル スレッドの意味で適用し、動的にTClientSocketメイン VCL スレッドの 1 つのループ内で終了すると、オブジェクトが再び削除されます。これは、同じハンドル漏れの問題を示します。コンポーネントが非推奨であることはわかっていますし、自分が行っていることが非効率的であることもわかっていますが、ハンドル リークが発生する理由がわかりません。TClientSocketこのハンドル リークをなくすためにオブジェクトを削除する前に、何かする必要があることはありますか?それとも、これはコンポーネントのバグですか? OnConnect OnDisconnect非ブロッキング モードでソケットを使用し、イベント ハンドラをおよびに割り当てていますOnSocketError

0 投票する
4 に答える
4799 参照

delphi - FreeOnTerminate = True を使用した TThread の Delphi 単体テスト

FreeOnTerminate = True の場合に TThread の子孫の Delphi DUnit テストを作成する最良の方法は何ですか? TThread の子孫は、テストする必要がある参照を返しますが、スレッドがテストで終了するのを待つ方法がわかりません...

どんなアイデアでも大歓迎です。

デルファイ 2010。

0 投票する
3 に答える
7412 参照

delphi - MessageBox が同期スレッドでアプリケーションをブロックしないのはなぜですか?

TThread クラスのメソッドを理解して知っている限り、コードを同期すると、実際にはメインのアプリケーション スレッドで実行されます (タイマー/ボタンクリックなどのように)。 MessageBox はメイン アプリケーションをブロックしませんが、スリープは期待どおりにブロックします。何故ですか?

0 投票する
2 に答える
993 参照

multithreading - スレッド変数を終了して NULL に設定する

子孫を扱うとき、TThread私は基本的に選択肢があります:

  • 子孫オブジェクトを削除しますが、設定FreeOnTerminateしませんtrueTThreadNULL
  • 手動で行い、自分で削除するという混乱をすべて経験します

基本的に必要なのは、スレッドが実行されているかどうかを判断する方法なので、次のことを行いました。

このコードはそのまま動作します。私の質問は次のとおりです。

  • これを簡単にする方法はありますか?MyThread開始/再起動の次の呼び出しまでオブジェクトが存在しないように、完了後に NULLに設定する必要がありますか? FreeOnTerminateオブジェクトを削除するため、これを trueに設定すると実行できません。オブジェクトにアクセスしようとすると、例外が生成されます(キャッチできますが、それはばかげています)。MyThread を初期化または再起動する前に、実行が完了しているかどうかを知る必要があるだけです。

  • スレッドを終了せずに再起動できますか (プログラムが終了するまでオブジェクトを削除する必要はありません)。

0 投票する
1 に答える
680 参照

delphi - TThread コンストラクターでの Free Pascal 2.6.2 エラー

Free Pascal 2.6.2 コンパイラ (Delphi モードを使用) は、

次のエラー メッセージが表示されます。

を使用して修正しました

2.6.2 での変更が原因のようです。TThread には、オプションの 2 番目の引数を持つコンストラクター宣言があります。

0 投票する
1 に答える
518 参照

multithreading - 複数の TThread インスタンス

独立して実行でき、完了後に終了して解放できる TThread クラスがあります。私は終了を検討し、すべてがうまくいきました。問題は、ユーザーが同時にアクティブにする SYNCHRONOUS スレッドの数を選択して選択できる機能を追加したいということです。例は次のとおりです。

  • プログラムは合計 100 のタスクを実行する必要があります。
  • ユーザーは、すべてのタスクを完了するために同時に実行する必要がある 3 つのスレッドを選択します。

最初に行った手順は、TThread クラスの 3 つのインスタンスを作成し、それらを for ループで再開することでした。したがって、3 つのスレッドが実行されます。最初のスレッドが完了 (または終了) したら、別の新しいインスタンスを作成して再開する必要があります。

この点に行き詰まり、どうすればこれを実現できるのだろうか。どんなアドバイスも役に立ちます。

編集:いくつかのコード