問題タブ [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 に答える
381 参照

multithreading - Delphi XE5 - 奇妙な動作のヘルプが必要

アプリケーションログをファイルに記録する TLogger クラスに取り組んでいます...

ファイルから TMemo へのログを取得する方法が必要です。2. GetLogsFromFile() を呼び出します。次に Self.Memo1.Text := TLogger.LogsResult;

以下...コメントされたソリューションは正常に機能します...コメントされていないソリューションは、ボタン4を2回クリックするたびにのみ機能します

TLogger の実装全体:

ご覧のとおり、違いは LDisplayInMemo だけです: True の場合、TMemo はログでいっぱいになります... False の場合、TMemo で結果を取得するには、ボタン 4 を 2 回クリックする必要があります...

何か案は?正直なところ、両方のソリューションの違いの理由がわかりません:( Self.Memo1.Text := logger.LogsResult; の後に ProcessMessages も試しました。

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

c++builder - 実行中のスレッドの数を保持する

メイン アプリケーションの C++ ビルダーで、リストにファイルがある場合にファイルを処理するスレッド (オブジェクト TThread) を作成します。同時に、実行中のスレッドの数を保持する必要があります。

私はそれを行う方法が表示されませんか?なにか提案を?

ありがとうございました。

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

multithreading - スレッド内から TThread-descendent をインスタンス化するのは安全ですか?

重い CPU/RAM 処理を行う必要があるタスクがあります。その結果、いくつかのデータベース リクエストを実行する必要があります。このすべてを数千回実行する必要があるため、バックグラウンド スレッド内で実行しています。現在、各タスクを 2 つの部分に分割し、それらを 2 つの別々のスレッドに分割して、最初のスレッドがデータベース リクエストの終了を待つ必要がないようにすることを検討しています。次に、2 番目のスレッドが最初のラウンドのデータベース要求を待っている間に、2 番目のラウンドの CPU/RAM 処理を行うことができ、すべてが高速化されます。

さて、最初の TThread から 2 番目の TThread の子孫をインスタンス化しても安全でしょうか? または、MainThread 内から TThread の子孫をインスタンス化する必要がありますか? 私は両方を行うことができますが、私の場合、最初のスレッド内から 2 番目をインスタンス化する方が簡単であり、2 番目のスレッドはプログラムの残りの部分に対して透過的であるため、oop パラダイムに従います。

0 投票する
0 に答える
277 参照

multithreading - Delphi XE を使用したマルチスレッドでの奇妙な結果

Delphi XE でマルチスレッドを使用しようとしています。タスクは次のとおりです。4 つのスレッドを作成する必要があります。各スレッドは、ペイントボックスの事前定義された領域に色付きの円を描画します。たとえば、最初のスレッドはペイントボックスの最初のクォーターに赤い円のみを描画し、2 番目のスレッドは 2 番目のクォーターに黄色の円のみを描画します。

次のクラスを定義しました

メインコードでは、次のことを行います。

スレッドの Create メソッドと Execute メソッドは次のように定義されています。

その結果、同じ色の 3 つの領域にいくつかの円が表示され、1 つの領域 (同じ色) に多数の円が表示されます。私が間違っていることは何ですか?

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

delphi - Delphi - TThread はメイン VCL スレッドの変数の値を変更できますか?

使用: Delphi XE2、Windows VCL フォーム アプリケーション

実行中の TThread はメイン VCL スレッドの変数の値を変更できますか?

TForm クラスのフィールドとして宣言されている Integer を更新する必要があります。これは、オーバーロードされた (そして再導入された) Create コンストラクター メソッドの var 変数として TThread に渡されます。

これにフォールバックはありますか?

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

delphi - TThread インスタンスが起動するのを待つ適切な方法は何ですか?

TThreadインスタンスの作成から起動までの間、メイン スレッドはコードの実行を続行します。メインスレッドのコードが問題のスレッドに依存して完全に稼働している場合、スレッドExecuteメソッドが実際に開始されるまで何らかの形で待機する必要があります。

次のコードを検討してください。

IsRunningフラグを待機するループDoActionがないと、含まれているウィンドウ ハンドルがまだ作成されないため、メッセージを正常に投稿できません。基本的にinc(Test)内部WndProcは発動しません。

スレッドの起動を待ってExecuteメソッド内で必要な初期化を完了するためのより良い方法はありますか、それともこの解決策はうまくいきますか?

注: とはスレッド セーフではないことを認識しており、上記の例のような製品コードでは使用しないでくださいAllocateHWndDeallocateHWnd

0 投票する
0 に答える
115 参照

multithreading - GUI コントロールに接続されている場合、TDataSet の非同期読み込みスレッドは安全ですか?

TThread の子孫を使用して、TDataSet にデータを非同期的にロードしたいと考えています。間違っていたら訂正してください。ただし、データセットが GUI コントロールに接続されていなければ問題はないと思いますが、TDataSet が、GUI コントロールにリンクされている TDataSource にリンクされている場合はどうでしょうか。myThread.synchronize は必要ですか?

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

multithreading - Delphi - カスタム スレッドが作成されない

ここで少し問題があります。TPersistent クラスを継承するカスタム クラスがあり、このカスタム クラスの内部 (プライベート セクション) には、オーバーライドされた Execute メソッドを使用して (1000 ミリ秒ごとに) 起動するカスタム TThread があります。2つのカスタムクラスを新しいユニットに移動するまで、すべてがうまく機能します...

上記のコードはメイン プロジェクト ユニットではうまく機能しますが、新しいユニットに移動するとスレッド コードが機能しなくなり、TMyClass オブジェクトを解放しようとすると AV が発生します。スレッドがまったく構築されていないと思います。そのため、スレッドを解放しようとすると AV が発生します...しかし、なぜですか? コードがどのユニットにあるかは問題ではありません...

ユニット1:

ユニット2:

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

multithreading - ループ変数の値が動的に作成された AnonymousThread に格納されない理由

動的に作成された に一意の識別子を格納する方法について、学術的な関心がありますTThread

私はこのようなものを作成します:

同期メソッドで表示できるように、動的に作成されたスレッドに一意の識別子を渡すことはできますか?

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

delphi - 突然破壊された TThread をキャプチャする方法

私は TThread を使用してソフトウェアに取り組んでいます。最近、プログラム開始から数日後に突然 TThread が破壊されるという問題に直面しています。

TThread では、スレッドは Synchronize() メソッドを使用してフォーム (TLable など) の表示を変更します。これは何か問題を引き起こすのではないかと思います。

問題の原因を突き止めることができるように、スレッドのいくつかの部分でログを記録しています。しかし、ログを確認すると、TThread のデストラクタが突然呼び出されていることがわかります。

TThread の FreeOnTerminate が true に設定されています。

プログラムは 2 つのスレッドを実行します。1 つのスレッドだけが突然破壊され、問題が発生した後も他のスレッドは動作しています。

この種の問題の原因をキャッチする方法を探しています。