C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

スレッドの終了を知りたいのですが・・・


(過去ログ 3 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■2748 / inTopicNo.1)  スレッドの終了を知りたいのですが・・・
  
□投稿者/ あや 二等兵(11回)-(2006/03/08(Wed) 21:44:35)

分類:[C#] 


分類:[C#] 

お世話になります。

System.Threading.Thread()で生成したスレッドの終了を検知したいのですが、
よい方法を知っている方いましたらアドバイスお願いします。

Join()を使ってみましたが、処理がブロック?されてしまうようでうまく
動きませんでした。

よろしくお願いします。

0
引用返信 編集キー/
■2749 / inTopicNo.2)  Re[1]: スレッドの終了を知りたいのですが・・・
□投稿者/ 中博俊 神(351回)-(2006/03/08(Wed) 22:20:13)
中博俊 さんの Web サイト

分類:[C#] 

終了させるのはあなたですよ?当然わかりますよね?

0
引用返信 編集キー/
■2754 / inTopicNo.3)  Re[1]: スレッドの終了を知りたいのですが・・・
□投稿者/ まどか 曹長(84回)-(2006/03/09(Thu) 00:32:58)

分類:[C#] 

> System.Threading.Thread()で生成したスレッドの終了を検知したいのですが、

イベントやデリゲートで通知すればよいのでは?

0
引用返信 編集キー/
■2757 / inTopicNo.4)  Re[1]: スレッドの終了を知りたいのですが・・・
□投稿者/ あや 二等兵(13回)-(2006/03/09(Thu) 10:35:54)

分類:[C#] 

すいません、私の説明が足りなかったようで・・・

やりたいことは、以下のような感じです。

public void MainProc() {
System.Threading.Thread t = new Thread(new ThreadStart(SubA));
t.Start();

// SubBが終了したらSubBを実行したい
}

public void SubB() {
// 処理

// デバッガで追ってみたところ、このメソッドから抜けたときに
// スレッドtが破棄されているようです。
// このスレッドが破棄されたのをMainProc()で検知したいのですが・・・
// イベントで通知してみましたが、うまくいきませんでした。
}

public void SubC() {
// SubBの結果を元に処理開始
}

いいたいことが伝わるかどうか心配なのですが、よろしくお願いします。
また、情報が不足してましたらご指摘願います。

0
引用返信 編集キー/
■2758 / inTopicNo.5)  Re[2]: スレッドの終了を知りたいのですが・・・
□投稿者/ まどか 曹長(85回)-(2006/03/09(Thu) 14:02:37)

分類:[C#] 

> // イベントで通知してみましたが、うまくいきませんでした。

ご提示の例だとイベントを実装する部分がありません。
#書いてないということではなく、実装できるオブジェクトではないということ

スレッド実行するメソッドを含むクラスを作成して、そこにイベントを実装してみましょう。


0
引用返信 編集キー/
■2759 / inTopicNo.6)  Re[2]: スレッドの終了を知りたいのですが・・・
□投稿者/ 囚人 二等兵(4回)-(2006/03/09(Thu) 14:06:34)

分類:[C#] 

2006/03/09(Thu) 14:08:05 編集(投稿者)

SubA SubB SubC が混乱しているので勝手に解釈します。

public class ThreadCommand
{
public event AsyncCallback End;

public void Run()
{
// 何か処理


// 終わった
End( null );
}
}

public class Program
{
private ThreadCommand threadCommad = new ThreadCommand();

public void MainProc()
{
Thread t = new Thread(new ThreadStart(threadCommad.Run));
threadCommad.End +=new AsyncCallback(SubB);
t.Start();
}

public void SubB( IAsyncResult ar )
{
// 終わったら呼び出される
}
}

イベントがデリゲートでもいいし、AsyncCallback である必要もありません。
#答え書いてもた…


0
引用返信 編集キー/
■2775 / inTopicNo.7)  Re[2]: スレッドの終了を知りたいのですが・・・
□投稿者/ Jitta 伍長(47回)-(2006/03/09(Thu) 20:58:28)

分類:[C#] 

> Join()を使ってみましたが、処理がブロック?されてしまうようでうまく
> 動きませんでした。
 ブロックする、と書いてありますもんね。それで、何が都合悪いのでしょう?ブロックせずに流れるオーバーロードもありますけど?
>>>>>
スレッドが終了するまで、または指定した時間が経過するまで呼び出し元のスレッドをブロックします。
<<<<<

 「うまく動かない」というのは、どんな動作を期待して、実際にはどうなっているのでしょう?

> // SubAが終了したらSubBを実行したい
> // SubBの結果を元に処理開始
 スレッドにする必要がない、のでは?

MainProc → SubA
 −    ↓処理
 −    ↓処理
 −←←←←←終了
 ↓
SubB
 ↓
SubC

コメントに書いているの(設計)は、こういう事ですよ?これだったら、SubA(); SubB(); SubC(); と、変わらないですよね?どこを並列にして、どこを直列にするのでしょう?


> // デバッガで追ってみたところ、このメソッドから抜けたときに
> // スレッドtが破棄されているようです。
 スレッド t が破棄されているのではなく、スレッドを参照させていた変数 t が、スコープが外れたために無くなった、ですよね。もちろん、スレッドも実行が終われば、破棄されますが。

〆 written by Jitta@わんくま同盟 on 2006/03/09

0
引用返信 編集キー/
■2780 / inTopicNo.8)  Re[2]: スレッドの終了を知りたいのですが・・・
□投稿者/ あや 二等兵(14回)-(2006/03/09(Thu) 22:25:33)

分類:[C#] 

すいません、私の説明不足でみなさんを混同させてしまったようで・・・

コーディング例はかなり端折って書いてしまい、なおかつ間違いだらけになってしまったことをお詫びします。

実際はユーザインターフェースも持っており、ユーザーからのアクションは生かしておきたいため、スレッドで処理しなければならないことは確かなんですが、うまく説明できていなかったこと反省してます。

いくつかのヒントも頂いたので、もう一度考え直してみます、お騒がせしました。

0
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -