問題タブ [thread-abort]

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 に答える
244 参照

c# - 別のスレッドから新しいtheardを開始し、それを中止しますC#

私がこのように何かをするなら:

DoWorkを実行する最初のスレッドを中止すると、DoMoreWorkも中止されますか?そうでない場合、どうすれば秒スレッド(DoMoreWork)を中止できますか?

ありがとう!

アップデート:

スクリプトを実行する際の問題。このために、メソッドMicrosoft.Scriptingを呼び出す新しいスレッドを開始し、スクリプトを中止できるようにしたい。スレッドを中止することはできますが、スクリプトを実行するためにcreateを実行するスレッドがわかりません。Execute()Microsot.Scripting

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

c# - 停止の呼び出しが行われると、スレッドがそれ以上処理されないようにします

スレッドの保持で実行されているプロセスの実行を開始および停止するWindowsサービスがあります。

次の2つのクラスがあります。

_actionQueueは、指定された繰り返し時間間隔で指定されたアクションを実行するために開発されたカスタム定義のソースコードです。すべてのアクションはキューに保持され、指定された時間間隔で呼び出されます。

これで、WindowsサービスのOnStartメソッドとOnStopメソッドは、それぞれEngineクラスのStartメソッドとStopメソッドを呼び出します。

私が欲しいのは、Windowsサービスが停止したときに、実行中のすべてのスレッドが処理/実行を停止する必要があることです。

しかし、ここで起こっているのは、新しいスレッドインスタンスが作成されているときに、スレッドの保持で実行されているプロセスの実行を開始および停止するWindowsサービスがあります。

次の2つのクラスがあります。

ActionQueueは、指定された時間間隔で指定されたアクションを実行するために開発されたカスタム定義のソースコードです。すべてのアクションはキューに保持され、指定された時間間隔で呼び出されます。

これで、WindowsサービスのOnStartメソッドとOnStopメソッドは、それぞれEngineクラスのStartメソッドとStopメソッドを呼び出します。

私が欲しいのは、Windowsサービスが停止したときに、実行中のすべてのスレッドが処理/実行を停止する必要があることです。

しかし、ここで起こっているのは、StartTaskメソッドで新しいスレッドインスタンスが作成されているためです。_task.ForEach(task => task.Abort())を呼び出すと、スレッドの正しいインスタンスがありません。つまり、すべてのインスタンスです。 of _thread = new Thread(....); 同じPerformTaskクラスに複数のキューがあるため、はアクセスされていません。

注:ActionQueueを変更できません。

  1. Abortメソッドはスレッドを停止する正しい方法ですか?

  2. すべてのスレッド(ソースコードによって作成されたThreadクラスのすべてのインスタンスを含む)を停止するにはどうすればよいですか?

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

winforms - このファイル検索スレッドを中止しても安全ですか?

まず、コード:

小さな画像表示プログラムを作成しています。画像を開くと、同じディレクトリ内のファイルの数が一覧表示されます。他の多くのファイル (たとえば 150K) を含むディレクトリで画像を開くと、ファイル リストの作成に数秒かかることに気付きました。したがって、このタスクを別のスレッドに委任しています。

ただし、ファイルの検索が完了する前に別の画像を開いた場合、その古いカウントはもはや関係ないため、スレッドを中止します。

写真を切り替えるためのいくつかの重要な機能を追加したいので、ロック_dirFilesしています。そのため、別の場所 (ただし UI スレッド内) にアクセスする必要があります。_fileIndexLeftRight

これは安全ですか?現在、C# でスレッドを処理する方法は数十あるようですが、単純なものが欲しかっただけです。


fileNameはローカル変数 (つまり、無名関数に「コピー」されるということですよね?) であり、_searchOption読み取り専用であるため、これら 2 つは安全にアクセスできると思います。

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

c# - スレッドが停止しないのはなぜですか?

次のコードがあります。ここで、コンストラクター引数としてオブジェクトをThread使用し始めます。ParameterizedThreadStart

メソッドで設定objnullた後もThreadTest、引数oはまだ有効なオブジェクトですが、なぜですか?引数を使用
するように設定するにはどうすればよいですか?onullobj

Thread.Abortは使いたくない

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

.net - フォームが閉じているときにthread.Abort()を呼び出しても大丈夫ですか?そうでない場合は、グローバルフラグで十分でしょうか?

まず第一に、Thread.Abort()は悪です-わかりました!それでは、私の状況を説明しましょう...

状況:

現在の実行ステータスのみをユーザーに表示するダッシュボードがあります。SQL Server DBに対してさまざまな選択クエリを実行し、最終的にダッシュボードにユーザーに表示されるいくつかの計算を実行します。ユーザーは同時に複数のダッシュボードを開くことができます。ダッシュボードを数秒ごとに更新するタイマースレッドがあります。そのタイマースレッドは別のスレッドを生成し(実際にはキューはスレッドプールで機能します)、長時間実行される計算/クエリを実行します。

問題:

ユーザーがXをクリックしてダッシュボードウィンドウを閉じるときは、すぐにシャットダウンする必要があります(たとえば、1秒以内に2秒は長すぎると思います)。だから私はこのコードを使用します:

問題は、ThreadAbortExceptionがキャッチされる場合と、キャッチされない場合があります。クエリを実行している最中は、ほとんどキャッチされていません。

[更新] innerexceptionをチェックすると、ThreadAbortExceptionをキャッチできることを最近発見しました。

質問:

  1. この場合、Thread.Abort()を使用しても大丈夫ですか?その場合、フォームを閉じたときにユーザーに表示されないように、常にThreadAbortExceptionをキャッチするにはどうすればよいですか?(私が読んだことから、これは可能ではないと思います)
  2. Thread.Abort()を使用しても問題がない場合(これはほとんどの人が答えると思います)、「グローバルブールフラグ」を使用してスレッドにシャットダウンするタイミングを指示することに関するその他の懸念事項があります。
    • スレッドが1秒の制限時間内に停止しないのではないかと心配しています。(たとえば、実行に1〜2秒かかるクエリがある場合があります)
    • if(shouldShutdown)ステートメントでコードを乱雑にする必要があります。
    • すべてのクラスが使用できるように、shouldShutdownフラグを静的にする必要がありますか?ユーザーが複数のダッシュボードを同時に開くことができる場合、これは問題になりますか?(静的変数がすべてのダッシュボードで共有されることを懸念しています。これは絶対に必要ありません。)
    • ワーカースレッドがシャットダウンする必要があることを確認したら、例外をスローする必要がありますか、それとも単に戻る必要がありますか?それらがちょうど戻った場合、一部の関数がfalseを返しても問題ないため、if(shouldShutdown)チェックをさらに追加する必要があります。例外をスローしても問題がない場合、どの例外をお勧めしますか?カスタムのもの?

ありがとう

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

php - PHP スレッド スクリプトが中止されました

サーバー (スレッド) で 1 時間ごとに実行される php スクリプトを取得しました。このスレッドが行っていることは、ユーザーがデータを含む Excel ファイルをアップロードできることです。スレッドは Excel ファイル内のデータをデータベース内のデータと比較し、何かを実行します (見つかった行が存在しない場合、データベースへの挿入は関係ありません)。Excel ファイルを読み取るには、次のように呼び出します。

ユーザーは、File_1.xls、File_2.xls、File_3.xls という名前のサーバーに、さらに xls ファイルをアップロードできます。最初のファイルを読み取り、すべてのデータを取得します。すべての比較を行います。すべての挿入を行います。エクセルの行。スレッドが長く実行されている場合、たとえば、ファイル 1 とファイル 2 を挿入でき、ファイルが 6000 行以上のような大きなファイルである場合、エラー ログに Abort が記録されることに気付きました。エクセルリーダーのせいだと思います。何か案は?

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

c# - ループを実行しているスレッドにループから抜け出して何か他のことをするように指示する適切な方法は何ですか?

次のコードには、メインスレッドがウェイトハンドルをリセットした後、ワーカースレッドがすぐに終了したり、最終アクションを実行したりしないという欠点があります。代わりに、ループの次の反復に到達するまで実行を継続し、その時点で無期限にブロックされます。

次のコードには、Abort()メソッドを使用するという欠点がありますが(絶対に避けるべきだと言う人がいます)、私が探していることを正確に実行します。メインスレッドがそうするように指示したらすぐに、最後の操作を実行して終了します。

どちらのソリューションも理想的ではないので、私が探している機能を実装するための適切な方法は何ですか?

(.net 4.5のタスクを含まないソリューションが望ましいです)

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

c# - Thread.Abort() と Application.Exitthread()

Exitthread は Thread 内からのみ呼び出すことができ、Abort は Thread オブジェクトにアクセスできる限りいつでもどこでも使用できることを知っています。しかし、スレッドを強制的に閉じる必要がある場合、これら 2 つの方法 (操作に関して) の間に他の重要な違いはありますか?

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

java - この操作を実行するスレッドを終了せずに、ファイルのアップロード/ダウンロード操作をキャンセルするにはどうすればよいですか?

私のコードは、インターネットからファイルをダウンロードする API メソッドを呼び出します。ダウンロードには時間がかかる可能性があるため、バックグラウンド スレッドがファイルのダウンロードを処理している間に進行状況バーを表示するウィンドウを閉じた場合に、ユーザーがダウンロードをキャンセルできるようにしたいと考えています。

API メソッドによって呼び出されるコードを制御できるかどうかわからないので、ダウンロード操作をキャンセルする必要があることをこのコードに通知するオプションがないと仮定しています。

この仮定が正しい場合、実際のファイル ダウンロードを実行するバックグラウンド スレッドを中止/中断したり、終了したりすることなく、ユーザーの要求に応じてファイル ダウンロード操作を終了するにはどうすればよいですか?

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

c# - Thread.Abort() はどのように機能しますか?

通常、無効な入力がメソッドに渡されたとき、またはオブジェクトが無効な状態に入ろうとしているときに例外をスローします。次の例を考えてみましょう

上記の例では、 throws をスローする throw ステートメントを挿入しましたArgumentNullException。私の質問は、ランタイムがどのように をスローするかThreadAbortExceptionです。明らかにthrow、すべてのメソッドでステートメントを使用することはできません。ランタイムでさえThreadAbortException、カスタム メソッドをスローすることができます。

彼らはどうやってそれをするのだろうと思っていましたか?舞台裏で何が起こっているのか興味があったので、リフレクターを開いて開いたThread.Abortところ、これに行き着きました

それから私はググって、このHow does ThreadAbortException really workを見つけました。このリンクは、ランタイムがQueueUserAPC関数を介して APC を投稿することを示しており、それが彼らがトリックを行う方法です。QueueUserAPCいくつかのコードでそれが可能かどうかを確認しようとしただけの方法を知りませんでした。次のコードは私の試みを示しています。

何か間違ったことをしている場合は、私を許してください、私はそれを行う方法がわかりません。もう一度質問に戻りますが、これについての知識を持っている人、または CLR チームの一部が内部でどのように機能するかを説明できますか? APCトリックランタイムがここで間違っていることに従うのですか?