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

delphi - TThread の正しい使い方

私を手伝ってくれますか。私はコンポーネント (TListView のようなもの) を作成しています。私のコンポーネントでは、3 つの手順を 1 つずつ実行します。

コンポーネントにスレッドを使用してこれらすべての手順を実行させる方法がわかりません。少なくとも最初の手順 (findFiles) は理解できません。さまざまな方法を試しましたが、何も出てきません。

ここに私が持っているもののスケッチがあります(単なる基本的な例です)。

そして、スレッドを実行して適切なアイコン (SetIcons) を設定します。

それは機能しましたが、バグがありました。コンポーネントがすべてのアイテムのアイコンを作成するわけではない場合があり、一部のアイテムのアイコンが完全に黒色で塗りつぶされている場合もあれば、アイコンがまったくない場合もあります。

次に、スレッドで 3 つの手順をすべて実行することにしました。

その結果、アイコンの作成で同じバグが発生し、指定されたフォルダーを検索する代わりに、アプリケーションがあったフォルダーを検索しました。

あなたが私をもっと理解するために、私は複数のタブを持つファイルマネージャを作成しようとしています.

私のコードを整理する方法を理解するのを手伝ってくれませんか?!!!! スレッディングに関するドキュメントはあまりないので、例を挙げることができるかもしれません。


また会ったね。
AsyncCalls と OmniThreadLibrary の両方を試しました。どちらも「バックグラウンド」ファイル検索の例を持っていました。最初に、AsyncCalls は本当にうまく機能したので、私のアプリケーションにより適していることがわかりました。私は AsyncCalls を使用して 3 つの手順を実行しましたが、それこそが私が探していたものでした。また、OmniThreadLibrary を使用してプロシージャを呼び出してみましたが、スレッドで実行されていないように見えました。それが私が AsyncCalls を好んだ理由ですが、質問があります。実行中の IAsyncCall を停止するにはどうすればよいですか? たとえば、アプリケーションがマルチタブである前に述べたように、ユーザーが 3 つのタブを開き、各タブでファイル検索を実行した場合、2 番目のタブでファイル検索を停止するにはどうすればよいでしょうか?

私が何をしたいのかをより明確にするために、ここにスケッチがあります:

フォームには 3 つの TMemo と 3 つの TButton があります

3 つのボタンはすべて、異なる TMemo (Memo1、Memo2、Memo3) を指していることを除いて、同じことを行います。

したがって、3 つのボタンすべてをクリックすると、3 つの IAsyncCall が実行されます。まだ実行中にそれらのいずれかを停止するにはどうすればよいですか?

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

multithreading - スリープせずにスレッドの実行を一時停止しますか?

メッセージを受信するたびにメッセージを送り返す Skype API を使用しています。これが本当に原因かどうかはわかりませんが、私が得ることができる最も近いものです.メッセージを送信しすぎると、COM コントロールはすべての応答を処理できず、アプリ全体がクラッシュします. forこれは、ループを使用すると発生します。

スレッドを使用して仕事をしているので、プログラムはハングしません。私Sleep();はスレッドでできることを知っており、プログラム全体をスリープ状態にする (べきではない) ことはありません。ただし、問題は、COM コントロールもスリープ状態になるため、必要なものを処理できず、再び追いつくことができることです。

問題は、スレッド全体を一時停止せずにルーチンを一時停止して、オーバーロードせずに COM オブジェクトで応答を処理できるようにするにはどうすればよいかということです。

0 投票する
6 に答える
4559 参照

multithreading - TThread Executeで例外を発生させますか?

自分の例外がスレッドでユーザーに表示されていないことに気づきました。

最初は、これをスレッドで使用して例外を発生させましたが、これは機能しません。

IDEは例外を表示しますが、私のアプリは表示しません!

私は解決策を探しました、これは私が見つけたものです:

Delphiスレッド例外メカニズム

http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_22039681.html

そして、これらのどちらも私にはうまくいきませんでした。

これが私のスレッドユニットです:

さらに情報が必要な場合はお知らせください。

繰り返しますが、IDEはすべての例外をキャッチしますが、私のプログラムはそれらを表示しません。

編集:最終的に機能したのはCosminのソリューションでしたが、最初は機能しなかったのは、ErrMsg変数を追加しなかったためです。代わりに、変数に含まれるものをすべてSynchronizeに配置しただけで、機能しませんでした。 、しかし、私には理由がわかりません。他にアイデアがなかったときに気づき、解決策をいじりました。

いつものように、冗談は私にあります。= P

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

multithreading - パブリック変数またはフィールドをTthreadに渡すか、アクセス可能にする方法は?

私はDelphiPrismを使用してMono用のソフトウェアを作成および構築しています。そこで、シリアル通信はスレッドで処理することにしました。プロジェクトのグローバル変数オプションを有効にしない限り、グローバル変数は厳密には許可されないため、DelphiPrismの規則に従うことにしました。では、どのようにしてパブリック変数またはフィールドをスレッドに渡したり、アクセス可能にしたりしますか?

これが私のテストメインフォームコードです:

シリアル通信のスレッドは次のとおりです。

ThreadCommの実行方法は次のとおりです。

コードをコンパイルするたびに、次のような30個程度の同様のエラーメッセージが表示されます。

インスタンス参照なしでインスタンスメンバー「SerialPort1」を呼び出すことはできません

エラーの意味はわかっていますが、それを解決する唯一の方法は、メインフォームのインスタンスを作成することです。これを行うと、メインプログラムのインスタンスと同じインスタンスにはなりません。この場合、フィールドまたはパブリック変数にアクセスする必要があるときは、常にmainformの新しいインスタンスを作成する必要があります。右?

それらすべてを使用したいのですが、変数はスレッド内にあり、たまたまメインフォームのパブリックエリア内にあります。

ありがとう

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

multithreading - 中間に MessageBox がない限り、TThread はその仕事をしません。

私はいくつかのソケット操作を行うために TThread のクラスを作成しました。問題は、コードに MessageBox を追加しない限りコードが機能しないことです。その前に MessageBox 呼び出しを配置し​​ない限り、ソケットは機能しません。

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

c++ - 終了/無料で違反するTThreadアクセス

時々(非常にまれに)TThreadの終了/解放時にViolateにアクセスする短いコードを実行しています。私はこれらのスレッドの多くのインスタンスを実行していますが、問題を引き起こしているのはこのスポットだけのようで、500回程度の呼び出しごとに1回だけ発生します。

いよいよ投げ込まれています。私の最初の推測では、WaitForSingleObjectが奇妙な方法でタイムアウトし、TerminateとFreeが混乱していましたが、それがどのように発生するかはよくわかりません。TThreadから継承したとき、Terminate/Freeメソッドとは何の関係も変更しませんでした。

ほんの少しのコードの後で、これら2つのメソッドが違反にアクセスする原因が何であるかを知っている人はいますか?

0 投票する
5 に答える
2776 参照

multithreading - 最小限のリソースを使用して定期的に何かをチェックするスレッドを実装するにはどうすればよいですか?

一定の時間間隔でサーバーへの接続をチェックするスレッドをバックグラウンドで実行したいと思います。たとえば、5秒ごと。

これに適した「デザインパターン」があるかどうかわかりませんか?私が正しく覚えているなら、executeメソッドでスリープしているスレッドは良くないことをどこかで読んだことがあります。しかし、私は間違っているかもしれません。

また、通常のTThreadクラスまたはOTLスレッドライブラリを使用できます。

何か案は?

ありがとう。

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

multithreading - Delphi:TThreadListがプログラムをロックすることがある

この関数がプログラムをロックし、閉じるまでフリーズすることがあります。ここで何が問題になっていますか?

クラス

私はそのようにリストに追加しています:

グローバルリストはグローバル変数です

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

delphi - スレッドエラー:中断されたスレッドを解放しようとすると、ハンドルが無効になります(6)

与えられた例では、電話をかけると例外が発生しますAThread.Free.

私は2つの質問があります:

  1. AThread特定の例でのインスタンスを解放するにはどうすればよいTThreadですか?

  2. わからない、なぜ自分自身を破壊する前にTThread.Destroy電話をかけているのか。Resumeこれのポイントは何ですか?

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

c++ - BorlandC++からCygwinC++:TThreadsからpthreads?

私はBorlandC++コンパイラへのすべての参照を削除する必要があるプロジェクトに取り組んでおり(なぜこれを行うのかは問題ではありません:))、これまでのところ比較的成功しています。

ただし、BorlandスレッドクラスであるTThreadsを拡張するこのクラスがあります。代わりにpthreadを使用したいのですが、pthreadを拡張できるかどうかはよくわかりません。

誰かがpthreadクラスを拡張すること、あるいはボーランドから非ボーランドに変換することについての有用な情報を持っているなら、私は大いに感謝するでしょう!