問題タブ [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 投票する
4 に答える
2396 参照

delphi - TThread の OnTerminate イベント内から例外を発生させることはできますか?

TThread例外が発生した場合、例外のクラスとメッセージを 2 つのプライベート フィールドに保存する子孫クラスを作成しました。

raiseメインスレッドがそれを処理できるように、イベントで同様の例外が発生する可能性があると思いOnTerminateました (ここでは簡略化したバージョンを示します)。

標準の例外処理メカニズム (エラー ダイアログ ボックス) が発生することを期待していますが、さまざまな結果が得られます。例外が発生しなかったかのようにオンになります。
問題はコールスタックに関するものだと思います。
それは悪い考えですか?
スレッドの例外をメインスレッドから分離するが、それらを標準的な方法で再現する別の方法はありますか?
ありがとうございました

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

multithreading - TThread.FinishThreadExecution の目的は何ですか? また、いつ呼び出されますか?

私は、バックグラウンドで実行され、進行状況バーを毎秒程度更新するスレッドを実装しようとしてきました.Delphi-timer inside thread generate AVへの一番上の回答の例に従ってください。提案されたソリューションには TThread.FinishThreadExecution の実装があることに気付きました。私の IDE は、私のバージョンの Delphi がその方法をサポートしていることを示していますが、それに関するドキュメントを見つけることができませんでした (Google は 10 件のヒットを見つけましたが、どれも役に立ちません。http://docwiki.embarcadero.com/はリストされていませんそのメソッドは何のために、いつ呼び出されるのですか?

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 つの領域 (同じ色) に多数の円が表示されます。私が間違っていることは何ですか?