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

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

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

Re[13]: マルチスレッドについて


(過去ログ 24 を表示中)

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

■10520 / inTopicNo.1)  マルチスレッドについて
  
□投稿者/ さぼてん (1回)-(2007/11/20(Tue) 11:16:30)

分類:[C#] 

はじめて投稿させて頂きます。

<質問>
System.Threading.Timerクラスを用いて下記処理を実現したいのですが、
1度だけフォルダをチェックするとアプリが終了してしまいます。
Mainクラスから終了指示を出すまで、定周期でThreadクラス内の処理を
実行する方法をご教授下さい。


<処理>
Mainクラス
システム立ち上げ時に起動される
シャットダウン時、スレッドを停止し、処理を終了する。

Threadクラス
定周期(3分)毎にフォルダをチェックし、
ファイルが作成さえている場合、DB作成等を行う。

引用返信 編集キー/
■10521 / inTopicNo.2)  Re[1]: マルチスレッドについて
□投稿者/ επιστημη (669回)-(2007/11/20(Tue) 11:26:18)
επιστημη さんの Web サイト
> System.Threading.Timerクラスを用いて下記処理を実現したいのですが、
> 1度だけフォルダをチェックするとアプリが終了してしまいます。

1. タイムアウトは定期的に発生していますか?

2. > ファイルが作成さえている場合、DB作成等を行う。
そのあと、どうしてますか? アプリを終了されてはいませんか?

引用返信 編集キー/
■10522 / inTopicNo.3)  Re[2]: マルチスレッドについて
□投稿者/ さぼてん (2回)-(2007/11/20(Tue) 11:33:18)
No10521 (επιστημη さん) に返信
返信ありがとうございます。

C#初心者なので、ご指摘されたことについて
上手くかいとうできませんが、引き続きよろしくお願いいたします。

> 1. タイムアウトは定期的に発生していますか?
 →タイムアウトは発生していないと思います。

> 2. > ファイルが作成さえている場合、DB作成等を行う。
> そのあと、どうしてますか? アプリを終了されてはいませんか?
 →特に終了指示等、実行していませんがアプリが終了されてしまいます。

引用返信 編集キー/
■10523 / inTopicNo.4)  Re[3]: マルチスレッドについて
□投稿者/ επιστημη (670回)-(2007/11/20(Tue) 11:36:34)
επιστημη さんの Web サイト
>>2. > ファイルが作成さえている場合、DB作成等を行う。
>>そのあと、どうしてますか? アプリを終了されてはいませんか?
>  →特に終了指示等、実行していませんがアプリが終了されてしまいます。

うーん... コンソール・アプリですか? GUIアプリですか?

引用返信 編集キー/
■10524 / inTopicNo.5)  Re[4]: マルチスレッドについて
□投稿者/ さぼてん (3回)-(2007/11/20(Tue) 12:00:49)
No10523 (επιστημη さん) に返信
> >>2. > ファイルが作成さえている場合、DB作成等を行う。
> >>そのあと、どうしてますか? アプリを終了されてはいませんか?
>> →特に終了指示等、実行していませんがアプリが終了されてしまいます。
>
> うーん... コンソール・アプリですか? GUIアプリですか?
→コンソール・アプリで作成しています。
   下記にMainクラスの処理をザックリですがのせます。
   気づいた点がありましたら、ご指摘下さい。

■Mainクラス内の処理
private ThreadTimerClass clsKanshi = null;
clsKanshi = new ThreadTimerClass();

//スレッド生成
TimerCallback KanshiTimer = new TimerCallback(clsKanshi.ThreadMethod);
System.Threading.Timer Kanshi = new System.Threading.Timer(KanshiTimer, null, 0, 180 * 1000);
clsKanshi.Run();
引用返信 編集キー/
■10529 / inTopicNo.6)  Re[5]: マルチスレッドについて
□投稿者/ カンタービレ (74回)-(2007/11/20(Tue) 12:38:30)
No10524 (さぼてん さん) に返信
> →コンソール・アプリで作成しています。
>    下記にMainクラスの処理をザックリですがのせます。
>    気づいた点がありましたら、ご指摘下さい。
>
> ■Mainクラス内の処理
> private ThreadTimerClass clsKanshi = null;
> clsKanshi = new ThreadTimerClass();
>
> //スレッド生成
> TimerCallback KanshiTimer = new TimerCallback(clsKanshi.ThreadMethod);
> System.Threading.Timer Kanshi = new System.Threading.Timer(KanshiTimer, null, 0, 180 * 1000);
> clsKanshi.Run();

ここ、あまり肝心なトコじゃないデス。。
Runした後どうしてるか、が重要なんだと思いマス。コンソールアプリだし。

スレッド終了待ってたり、無限ループで繰り返したりの部分が見たいデス。

引用返信 編集キー/
■10530 / inTopicNo.7)  Re[5]: マルチスレッドについて
□投稿者/ なちゃ (74回)-(2007/11/20(Tue) 12:40:48)
ThreadTimerClassが何をやってるのか分からないんですが、
とりあえずclsKanshi.Run();より後ろでKanshi.Dispose();とか。

引用返信 編集キー/
■10531 / inTopicNo.8)  Re[6]: マルチスレッドについて
□投稿者/ なちゃ (75回)-(2007/11/20(Tue) 12:42:20)
まあやっぱりその前にclsKanshi.Runの中身かな。
引用返信 編集キー/
■10532 / inTopicNo.9)  Re[6]: マルチスレッドについて
□投稿者/ επιστημη (671回)-(2007/11/20(Tue) 12:42:35)
επιστημη さんの Web サイト
No10529 (カンタービレ さん) に返信
> ここ、あまり肝心なトコじゃないデス。。
> Runした後どうしてるか、が重要なんだと思いマス。コンソールアプリだし。
> スレッド終了待ってたり、無限ループで繰り返したりの部分が見たいデス。

そゆこと。
スレッドが仕事完了するまで待たんとお先に失礼しちゃったらなんにもならんだろ。
そこを確認したいすね。

↓つかマニュアル読んだのか、と。
http://msdn2.microsoft.com/ja-jp/library/system.threading.timer.aspx

引用返信 編集キー/
■10536 / inTopicNo.10)  Re[7]: マルチスレッドについて
□投稿者/ さぼてん (4回)-(2007/11/20(Tue) 13:30:32)
No10531 (なちゃ さん) に返信
> まあやっぱりその前にclsKanshi.Runの中身かな。

度々、スイマセン。
Dispose処理等は、行っています。
ThreadTimerClassでは、以下の処理を行っています。

private Object obj = new Object();

lock (obj)
{
//ファイル有無チェック
//ファイル分ループしてDB作成

}
引用返信 編集キー/
■10539 / inTopicNo.11)  Re[8]: マルチスレッドについて
□投稿者/ 囚人 (240回)-(2007/11/20(Tue) 13:47:55)
ここまでの流れをあまり読んでいませんが、Main のスレッドが終了したら全てが終わるという事は認識できていますか?
引用返信 編集キー/
■10540 / inTopicNo.12)  Re[9]: マルチスレッドについて
□投稿者/ さぼてん (5回)-(2007/11/20(Tue) 14:00:25)
No10539 (囚人 さん) に返信
> ここまでの流れをあまり読んでいませんが、Main のスレッドが終了したら全てが終わるという事は認識できていますか?

書き込みありがとうございます。

Console.ReadLine();
を使用してMainスレッドを終了しないようにすれば
定周期(3分)毎にフォルダをチェックを行う事は確認しています。

引用返信 編集キー/
■10544 / inTopicNo.13)  Re[10]: マルチスレッドについて
□投稿者/ なちゃ (76回)-(2007/11/20(Tue) 15:06:09)
ええと確認ですが、どうなった時に終わらせたいんでしょう?
Mainからの通知というのを、何を起点にしようとしてますか?

タイマを使うなら、Mainで待ってるだけでいいと思いますが。
ていうかMainからRunを呼ぶんじゃなくて、ThreadMainから呼ぶ感じになると思うんですけどね。
引用返信 編集キー/
■10547 / inTopicNo.14)  Re[11]: マルチスレッドについて
□投稿者/ さぼてん (6回)-(2007/11/20(Tue) 16:15:36)
No10544 (なちゃ さん) に返信
> ええと確認ですが、どうなった時に終わらせたいんでしょう?
> Mainからの通知というのを、何を起点にしようとしてますか?

→シャットダウンプロセスの受信で終了処理を行いたいと思っております。


引用返信 編集キー/
■10549 / inTopicNo.15)  Re[12]: マルチスレッドについて
□投稿者/ 774RR (64回)-(2007/11/20(Tue) 16:53:00)
マルチスレッドにする必然がまったく感じられないんだけど

Main で行う処理
初期化処理;
while (シャットダウンメッセージが無い間) {
 sleep(3分);
 if (ファイルチェック) {
  なんか作成;
 }
}
終了処理;
引用返信 編集キー/
■10555 / inTopicNo.16)  Re[13]: マルチスレッドについて
□投稿者/ とっちゃん (217回)-(2007/11/20(Tue) 17:35:46)
とっちゃん さんの Web サイト
No10549 (774RR さん) に返信
> マルチスレッドにする必然がまったく感じられないんだけど
>
ここは激しく同意。

> Main で行う処理
> 初期化処理;
> while (シャットダウンメッセージが無い間) {
>  sleep(3分);
>  if (ファイルチェック) {
>   なんか作成;
>  }
> }
> 終了処理;
これだと、3分+ファイル処理時間に一度しかシャットダウンメッセージを確認できないですよね?
よほどいいタイミングじゃないと、シャットダウン時に応答なしにされると思います。


出てきちゃったので...ついでにw

No10547 (さぼてん さん) に返信
>>Mainからの通知というのを、何を起点にしようとしてますか?
>
> →シャットダウンプロセスの受信で終了処理を行いたいと思っております。

と書いていらっしゃいますが、そもそもこの「シャットダウンプロセスの受信」のやり方は
できているのでしょうか?

もし、まだだというのであれば、3分待ってどうのよりも前にそっちを先に解決することをお勧めします。

一定の時間ごとに何かをするというのは掲示板などでもよく見かける質問の一つなので
検索すればゴロゴロと類似のネタは転がっていると思いますが、「シャットダウンプロセスの受信」は
あまり多いネタではないと思うので。

#少なくともおいらの頭の引出しの中にはこのネタの直接的な解決策は入ってないw(コンソールに限って言えばですがねw)

引用返信 編集キー/
■10556 / inTopicNo.17)  Re[13]: マルチスレッドについて
□投稿者/ mあ@反省中 (24回)-(2007/11/20(Tue) 17:39:42)
<処理>
Mainクラス
システム立ち上げ時に起動される
シャットダウン時、スレッドを停止し、処理を終了する。



以前これとそっくりな質問あったでしょう?
Windowsサービスでフォルダ監視したい、ってゆー。

3週間以内の過去スレ見れば参考になるよ。
nbyou って名前の人のスレ。


引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -