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

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

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

Re[15]: TimeCallbackについて


(過去ログ 20 を表示中)

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

■8149 / inTopicNo.1)  TimeCallbackについて
  
□投稿者/ ちー(初心者) (1回)-(2007/09/25(Tue) 11:52:01)

分類:[C#] 

教えてください。

TimerのCallbackを使用しています。

callbackで呼びだす関数の中で処理が終わった時に、
処理が終わったことを呼び出し元に知らせる方法はありますか?

今は、callbackで呼びだした関数の中で、timerオブジェクト.setでcallback処理を止めようと思っていますが、
止まらずにcallbackの処理が行われてしまいます。

よろしくお願いいたします。


引用返信 編集キー/
■8152 / inTopicNo.2)  Re[1]: TimeCallbackについて
□投稿者/ Hongliang (194回)-(2007/09/25(Tue) 12:45:07)
Hongliang さんの Web サイト
> callbackで呼びだす関数の中で処理が終わった時に、
> 処理が終わったことを呼び出し元に知らせる方法はありますか?

コールバックの呼び出し元はフレームワークだと思うのですが。
一体何を「呼び出し元」とされてるのでしょうか。

> 今は、callbackで呼びだした関数の中で、timerオブジェクト.setでcallback処理を止めようと思っていますが、
> 止まらずにcallbackの処理が行われてしまいます。

set なんてメソッドは System.Threading.Timer にはないようですが。Change のことかしらん?
それとも標準クラスライブラリにはない Timer クラスをご使用ですか?
// そういえば記事タイトルの TimeCallback ってのも標準にはないな。

取り敢えず System.Threading.Timer のこととして、止めると言うのもいささか抽象的ですが、どんなコードをお書きですか?
また「止まらずに」ってのは一回ないし数回余分に実行されて止まるのか、それとも一切止まる気配がないのかどちらでしょうか?
引用返信 編集キー/
■8191 / inTopicNo.3)  Re[2]: TimeCallbackについて
□投稿者/ ちー(初心者) (2回)-(2007/09/26(Wed) 00:07:09)
No8152 (Hongliang さん) に返信
すいません、Timercallbackの間違いでした。

ソースは、以下の通りです。

Timer[] KansiTime;
TimerCallBack callback;

struct Kouzo
{
public Cnt;
}

public void Kansi()
{
object Cunter;

Kouzo KOUZO1 = new Kouzo();
KansiTime = new KansiTime[10];
callback = new TimerCallBack(method);

for(int i = 0; i<10; i++)
{
KOUZO1.Cnt = i;
Cunter = KOUZO1;
    // タイマーを配列数分発行する。
// 行う処理はcallback関数はすべて一緒
kansiTime[i] = new Timer(callback,Cunter,1000,1000);
}
}

private void method(object data)
{
Kouzo methKouzo = new Kouzo;
methKouzo = (Kouzo)data;

if(methKouzo,Cnt == 5)
{
// ここに、配列の5番目のTimerだったら、
// Timercallbackを止めるという処理を入れたいです。
   // (実際は、配列番目のプロセスが起動しているか確認し、起動していたらTimercallback関数を止めるという処理です。)
}
// 5番目の配列以外だったら、そのままずっと処理を行っているという感じにしています。
  // (実際配列5番目以外のプロセスが起動してる場合は処理を続けています。)
}
引用返信 編集キー/
■8210 / inTopicNo.4)  Re[3]: TimeCallbackについて
□投稿者/ επιστημη (598回)-(2007/09/26(Wed) 11:44:33)
επιστημη さんの Web サイト
> // Timercallbackを止めるという処理を入れたいです。

Timer.Changeメソッドでタイムアウトを殺せるんじゃないかしら。
タイムアウトしなくなればコールバックも起こりませんし。

引用返信 編集キー/
■8264 / inTopicNo.5)  Re[4]: TimeCallbackについて
□投稿者/ ちー(初心者) (3回)-(2007/09/27(Thu) 00:47:21)
Timer.Changeですか?

タイムアウトするためにはパラメータはどうすればよいのですか?
整数値だと、間隔時間?が変わるだけ??なのですか???

−1にすると、例外が発生してしまいますよね?


引用返信 編集キー/
■8269 / inTopicNo.6)  Re[5]: TimeCallbackについて
□投稿者/ επιστημη (601回)-(2007/09/27(Thu) 01:29:29)
επιστημη さんの Web サイト
> タイムアウトするためにはパラメータはどうすればよいのですか?
> 整数値だと、間隔時間?が変わるだけ??なのですか???

MSDNによればTimer.Changeの第一引数にTimeout.Infiniteを指定すれば
次回のタイムアウト発生までの時間を"無限大"にできるとありますが、ダメでした?

引用返信 編集キー/
■8337 / inTopicNo.7)  Re[6]: TimeCallbackについて
□投稿者/ ちー(初心者) (4回)-(2007/09/28(Fri) 01:01:48)
No8269 (επιστημη さん) に返信
>>タイムアウトするためにはパラメータはどうすればよいのですか?
>>整数値だと、間隔時間?が変わるだけ??なのですか???
>
> MSDNによればTimer.Changeの第一引数にTimeout.Infiniteを指定すれば
> 次回のタイムアウト発生までの時間を"無限大"にできるとありますが、ダメでした?
>

すいません、仕事を休んだため、確認できませんでした。
明日、やってみたいと思います。



引用返信 編集キー/
■8464 / inTopicNo.8)  Re[7]: TimeCallbackについて
□投稿者/ ちー(初心者) (5回)-(2007/10/01(Mon) 10:39:31)
method内で、Timer.Changeの第一、第二引数にTimeout.Infiniteを設定しましたが、
またTimerCallBackにより呼び出させてしまいました・・・。

困りました・・・。


引用返信 編集キー/
■8466 / inTopicNo.9)  Re[8]: TimeCallbackについて
□投稿者/ mあ (85回)-(2007/10/01(Mon) 11:13:22)
No8464 (ちー(初心者) さん) に返信
> またTimerCallBackにより呼び出させてしまいました・・・。

呼び出すのは正しい動作ということにして、中身をやらなければ
いいだけでは?
呼び出して何か処理をする場合、その何かの処理には条件がある
のでしょう?

if (KOUZO == 5) {
for (int i=0;i < 10;i++) KansiTime[i].Dispose();
}

何に悩んでいるのかよくわかりまっせん。


引用返信 編集キー/
■8467 / inTopicNo.10)  Re[9]: TimeCallbackについて
□投稿者/ ちー(初心者) (6回)-(2007/10/01(Mon) 11:32:48)
No8466 (mあ さん) に返信

確かに、再度呼び出されてもその後の処理をしなければ
問題はないです。

今は後の処理を行わないようにしています。

ただ、TimerCallBackを止める方法があれば、それが理想かなと。

DispoceやTimer.Changeの方法があるので、それを試したらうまくいかなかったので、
質問してみました。

すいません。
引用返信 編集キー/
■8478 / inTopicNo.11)  Re[10]: TimeCallbackについて
□投稿者/ まどか (374回)-(2007/10/01(Mon) 13:28:10)
動き続けているのなら問題だけど、
タイミング的に最後に実行されたのを「止めたのに実行された」と勘違いしてませんか?
#「止める」ではなく「止まるまで」はタイマが動いているわけですから。

「止めたのに動き続けている」についてはどうなんでしょうか?
引用返信 編集キー/
■8486 / inTopicNo.12)  Re[11]: TimeCallbackについて
□投稿者/ ちー(初心者) (7回)-(2007/10/01(Mon) 14:40:59)
if (KOUZO == 5) {
KansiTime[KOUZO].Dispose();
}

こうやって、5番目のタイマーをDisposeしてますが、
他の配列のタイマーは動いています。

で、その他のタイマーを確認していると、Disposeしたはずの配列5番目が
また処理されようとしていました。

もしかして、DipocseはTimerCallBackするメソッド内では使えないのですか?
呼び出し元でやらなければDisposeはされないのですか?

引用返信 編集キー/
■8501 / inTopicNo.13)  Re[12]: TimeCallbackについて
□投稿者/ まどか (375回)-(2007/10/01(Mon) 17:06:28)
#違ってたら、「失礼な!」と遠慮なく怒ってください。

5番目ということは、配列では0から始まるので4になるわけですが、違う配列を見ているということはないですか?
引用返信 編集キー/
■8504 / inTopicNo.14)  Re[13]: TimeCallbackについて
□投稿者/ ちー(初心者) (8回)-(2007/10/01(Mon) 17:43:05)
No8501 (まどか さん) に返信
> #違ってたら、「失礼な!」と遠慮なく怒ってください。
>
> 5番目ということは、配列では0から始まるので4になるわけですが、違う配列を見ているということはないですか?

すいません、私の書き方がまずいですね。

配列番号はあっていました(汗)

引用返信 編集キー/
■8509 / inTopicNo.15)  Re[14]: TimeCallbackについて
□投稿者/ ちー(初心者) (9回)-(2007/10/01(Mon) 19:17:15)
再度TimerCallBackされても、その中の処理を行わないようにして対処しました。

ありがとうございました。
解決済み
引用返信 編集キー/
■8538 / inTopicNo.16)  Re[15]: TimeCallbackについて
□投稿者/ PATIO (24回)-(2007/10/02(Tue) 17:37:31)
2007/10/02(Tue) 17:38:17 編集(投稿者)

No8509 (ちー(初心者) さん) に返信
> 再度TimerCallBackされても、その中の処理を行わないようにして対処しました。
>
> ありがとうございました。

解決しちゃってますけれど、
この行って正しいんでしょうか?

KansiTime = new KansiTime[10];

私の感覚だと

KansiTime = new Timer[10];

じゃないかと思うんですけれど。

あうあう、解決が外れてしまったのでつけときます。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -