マクロの多重実行??No.05957
"y.iida" さん 01/10/20 17:27
 
下記が出る条件を教えてください。

17:19:47.455 (4648) マクロ実行中にマクロを多重実行しようとしました。指示され
たマクロ
実行はキャンセルされました。

受信が一段落した時の自動実行に登録してあるのがイカンのかなぁ??
下記です。問題があればご指導下さい。

//==DLLロードなど省略==
##num = dllfunc("RecvMailCount");
if(##num == 0){//受信無し
freedll;
endmacro;
}

// 常駐鶴亀で本体が出てない時、または、最小化している
if((dllfunc("IsTrayIcon") == 1 && dllfunc("MainWnd") == 0) ||
    dllfunc("IsIcon") == 1){
#tmp = dllfunc("SetAutoPushTimer",  5,"no");
question "メールが" + str(##num) +"通 届きました。すぐ読む?";
if(!result){
freedll;
endmacro;
}
else{
#tmp = dllfunc("RestoreWindow");
freedll;
execmacro "Rcv_top.mac";
endmacro;
}
}
freedll;
endmacro;

[ ]
RE:05957 マクロの多重実行??No.05958
ひろ さん 01/10/20 17:57
 
 y.iida さん今日は、ひろです。
> 下記が出る条件を教えてください。
>
> 17:19:47.455 (4648) マクロ実行中にマクロを多重実行しようとしました。指示され
> たマクロ
> 実行はキャンセルされました。
 どの様な操作をしたかの情報がないと、ハッキリしたことは言えませんが、
メッセージの通りマクロの多重実行をしているためです。

[ ]
RE:05958 マクロの多重実行??No.05959
"y.iida" さん 01/10/20 18:05
 
>  どの様な操作をしたかの情報がないと、ハッキリしたことは言えませんが、
> メッセージの通りマクロの多重実行をしているためです。

言葉が足りなくて、ごめんなさい。
自分では多重実行しているつもりはないのですが、
これが出ることがあるのです。

具体的には(タイミングが合わなくて再現できませんけど)
受信する→自動起動が動く→メッセージが出る→放置する→Noが選択される
→常駐アイコンをクリックして起動する→未読記事を見つけて開く(読む)→
この瞬間に定期受信が起きると出るらしい??

17:19:47.435 (5970) StartAutoDownTimer()
17:19:47.435 (5978) StartAutoDownTimer() set
17:19:47.445 ( 960) SetReceivedTaskbarIcon Reset!
17:19:47.445 ( 989) 常駐鶴亀アイコンを戻します。
17:19:47.445 (1001) 鶴亀本体アイコンを戻します。
17:19:47.455 (4648) マクロ実行中にマクロを多重実行しようとしました。指示され
たマクロ
実行はキャンセルされました。
17:21:10.164 (4657) MessgeBox2() exit

こんな感じなので、ボクのマクロがイカンのかなぁ?という事です。

[ ]
RE:05959 マクロの多重実行??No.05960
ひろ さん 01/10/20 18:13
 
 y.iida さん今日は、ひろです。
> 受信する→自動起動が動く→メッセージが出る→放置する→Noが選択される
> →常駐アイコンをクリックして起動する→未読記事を見つけて開く(読む)→
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 No の時に限定できませんが、下線部の未読記事を読み進めるときに、マク
ロを使っているということはないですが?

> こんな感じなので、ボクのマクロがイカンのかなぁ?という事です。
 先の投稿の
> execmacro "Rcv_top.mac";
の内容が解らないので、断定は出来ませんが、先のマクロ自体は問題ない思います。

[ ]
RE:05960 マクロの多重実行??No.05961
"y.iida" さん 01/10/20 18:27
 
> > 受信する→自動起動が動く→メッセージが出る→放置する→Noが選択される
> > →常駐アイコンをクリックして起動する→未読記事を見つけて開く(読む)→
>                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>  No の時に限定できませんが、下線部の未読記事を読み進めるときに、マク
> ロを使っているということはないですが?

そういうマクロも持ってはいますが、この場合、動かしてないです

> > execmacro "Rcv_top.mac";
> の内容が解らないので、断定は出来ませんが、先のマクロ自体は問題ない思います

Noなので、これは動いてないと思います。

ボクが推測するに(昔、こんな事あったような記憶??)鶴亀自身が
"メールを開く"とか"受信する"というマクロ?を呼んでいて
自動実行のマクロとぶつかっているような気がしています。

[ ]
RE:05961 マクロの多重実行??No.05962
秀まるお さん 01/10/21 22:47
 
 とりあえずコメントしますが、定期受信をONにしているなら、たとえば
question文が実行されてメッセージが出ている状態のまま放置しておくと、定期
受信がまた実行されて、結果、定期受信後のマクロがまた実行されようとして多
重実行になることがあります。

 しいて鶴亀側で対処するなら、たとえばマクロ実行中には定期受信しないよう
な修正をするしか無いような気もしますけど、あえてそうしなくても、マクロ側
でも対処できます。

 question文を使うならtkinfo.dllのタイムアウト処理を組み合わせたらいいん
じゃないかと思います。

[ ]
RE:05962 マクロの多重実行??No.05963
"y.iida" さん 01/10/22 10:00
 
> とりあえずコメントしますが、定期受信をONにしているなら、たとえば
>question文が実行されてメッセージが出ている状態のまま放置しておくと

#tmp = dllfunc("SetAutoPushTimer",  5,"no");
question "メールが" + str(##num) +"通 届きました。すぐ読む?";

これしかないですから、大丈夫ですよね?

とりあえず再現する要素を絞り込んでみます。

[ ]
RE:05963 マクロの多重実行??No.05964
秀まるお さん 01/10/22 10:12
 
 すみません。昨日夜中にとりあえず思いついたコメントをしたら、既に
SetAutoPushTimerしてたんでした。

 原因が分からなければ、実行しようとしたマクロが何か、エラーメッセージ
中に表示するよう修正してみます。

[ ]
RE:05964 マクロの多重実行??No.05965
"y.iida" さん 01/10/22 10:40
 
>SetAutoPushTimerしてたんでした。

この命令は非常に便利でバンバン活用させて頂いています。
(Windwosのバグだと思いますが?(アクティブ窓の関係??)
 稀に押せない事があるみたいです。これも中々、再現できない(^^;))

> 原因が分からなければ、実行しようとしたマクロが何か、エラーメッセージ
>中に表示するよう修正してみます。

再現を追い込んでみますが、何せ再現性が低いので
お手数でなければ、そうして頂けると助かります。
(前にもコメントしましたが、恐らく、エディタを開きながら
 自動受信とか、そういう複合系だと思います)

[ ]
RE:05965 マクロの多重実行??No.05966
秀まるお さん 01/10/22 15:51
 
 鶴亀内部でマクロ実行するケースを調べてみましたが、いまいち該当しそう
な物が分かりませんでした。

 それで、dump.txtが残っているのでしたら、

>17:19:47.455 (4648) マクロ実行中にマクロを多重実行しようとしました。…

 の直前(の時刻)に何か記録が残ってないか教えて欲しいです。例えばその
部分に定期受信終了の記録が残っているなら、やはり定期受信のマクロを多重
実行しようとしたってことになります。

[ ]
RE:05966 マクロの多重実行??No.05967
秀まるお さん 01/10/22 17:31
 
 今、定期受信後のマクロ実行を多重に実行させるテストをしてみましたが、
「他の鶴亀ウィンドウがマクロ終了するまで待っています」というメッセージ
が出てきたそのまま待機状態となりました。

 ということで、普通に使っている分には多重実行エラーは出ないはずです。

 とりあえずもっと詳しいエラーメッセージを出すように修正しましたので、
それにてまたテストしていただくということにしたいと思います。

[ ]
RE:05967 マクロの多重実行??No.05968
"y.iida" さん 01/10/22 18:29
 
>  今、定期受信後のマクロ実行を多重に実行させるテストをしてみましたが、
> 「他の鶴亀ウィンドウがマクロ終了するまで待っています」というメッセージ
> が出てきたそのまま待機状態となりました。
>
>  ということで、普通に使っている分には多重実行エラーは出ないはずです。

お手数掛けてすみません。

とりあえず・・17:19:47はこれで全部です。

====== 2001/10/20 17:19:46 mode=受信 account=xxxxx
接続中
R +OK <9722.1003565986@xx.xxx.xxxxxx.ne.jp>
S APOP ****
R +OK
S STAT
R +OK 0 0
S QUIT
R +OK
17:19:47.074 ( 523) CSock::PostExit()
17:19:47.074 (1790) IDTIMER_SOCKET_END received
17:19:47.084 (1826) IDTIMER_TRANS_START post
17:19:47.084 (1580) IDTIMER_TRANS_START kill
17:19:47.084 (1601) IDTIMER_TRANS_END set
17:19:47.385 (1787) IDTIMER_TRANS_END kill
17:19:47.385 ( 103) EndSilentDialog()
17:19:47.385 (1855) TransDlgProc() WM_DESTROY
17:19:47.385 (  97) SilentDialogBox() exit
17:19:47.385 (2093) ProcessTransmitSub() ModelessDialog, TransDlgProc exit
17:19:47.395 (1053) RestoreTransmitTaskbarIcon()
17:19:47.395 ( 960) SetReceivedTaskbarIcon Reset!
17:19:47.395 ( 989) 常駐鶴亀アイコンを戻します。
17:19:47.405 (1001) 鶴亀本体アイコンを戻します。
17:19:47.405 ( 452) CSock::~CSock()
17:19:47.405 (2133) fSetReceivedIcon != 0
17:19:47.415 ( 958) SetReceivedTaskbarIcon Set!
17:19:47.425 (2192) ProcessTransmitSub() exit
17:19:47.425 (3115) LeaveTrans()
17:19:47.425 (2927) CTrans::AutoDown() exit
17:19:47.435 (5970) StartAutoDownTimer()
17:19:47.435 (5978) StartAutoDownTimer() set
17:19:47.445 ( 960) SetReceivedTaskbarIcon Reset!
17:19:47.445 ( 989) 常駐鶴亀アイコンを戻します。
17:19:47.445 (1001) 鶴亀本体アイコンを戻します。
17:19:47.455 (4648) マクロ実行中にマクロを多重実行しようとしました

[ ]
RE:05967 マクロの多重実行??No.05971
ひろ さん 01/10/24 12:24
 
 秀まるおさん今日は、ひろです。
>  とりあえずもっと詳しいエラーメッセージを出すように修正しましたので、
> それにてまたテストしていただくということにしたいと思います。
 起きたので、dump.txt を投稿しておきます。なお多重実行しようとしたマ
クロは、「送受信が一段落した時」で指定しているマクロです。このとき
TransmitAll を使ったマクロを使用していたので、それが原因でしょうか?

11:47:04.610 ( 523) CSock::PostExit()
11:47:04.670 (1840) IDTIMER_SOCKET_END received
11:47:04.670 (1876) IDTIMER_TRANS_START post
11:47:04.670 (1630) IDTIMER_TRANS_START kill
11:47:04.670 (1651) IDTIMER_TRANS_END set
11:47:05.000 (1837) IDTIMER_TRANS_END kill
11:47:05.000 ( 103) EndSilentDialog()
11:47:05.000 (1905) TransDlgProc() WM_DESTROY
11:47:05.000 (  97) SilentDialogBox() exit
11:47:05.000 (2143) ProcessTransmitSub() ModelessDialog, TransDlgProc exit
11:47:05.000 (1056) RestoreTransmitTaskbarIcon()
11:47:05.000 ( 962) SetReceivedTaskbarIcon Reset!
11:47:05.000 ( 992) 常駐鶴亀アイコンを戻します。
11:47:05.000 (1004) 鶴亀本体アイコンを戻します。
11:47:05.000 ( 452) CSock::~CSock()
11:47:05.000 (2242) ProcessTransmitSub() exit
11:47:05.000 (3165) LeaveTrans()
11:47:05.000 (2977) CTrans::AutoDown() exit
11:47:05.000 (6035) StartAutoDownTimer()
11:47:05.000 (6043) StartAutoDownTimer() set
11:47:05.000 (4673) DialogBox2() template=285
11:47:05.050 (4648) マクロ実行中にマクロを多重実行しようとしました。
指示されたマクロ実行はキャンセルされました。

実行しようとしたマクロ = (内部的なマクロ)- turukame\mailpopup.mac
11:47:19.720 (4657) MessgeBox2() exit
11:47:22.630 (4675) DialogBox2() exit
11:47:34.760 (5262) ProcessCommand 40024
11:47:34.760 (3150) EnterTrans(), dwRet = 0
11:47:34.760 (3160) EnterTrans() entered
11:47:34.820 (2012) ProcessTransmitSub()
11:47:34.820 (2015)  fSetReceivedIcon = 0
11:47:34.870 ( 529) RASSUB::EnsureOnline()
11:47:34.870 ( 538) RASSUB: GetConnectedState
11:47:34.870 ( 540) RASSUB: already connected
11:47:34.870 ( 433) CSock::CSock()
11:47:34.870 (2121) ProcessTransmitSub() new pSock
11:47:34.870 (2141) ProcessTransmitSub() ModelessDialog, TransDlgProc
11:47:34.870 (  56) SilentDialogBox()
11:47:34.870 (1556) TransDlgProc() WM_INITDIALOG
11:47:34.870 (1574) IDTIMER_TRANS_START set
11:47:34.930 (1630) IDTIMER_TRANS_START kill

[ ]
RE:05971 マクロの多重実行??No.05972
秀まるお さん 01/10/24 17:05
 
> 起きたので、dump.txt を投稿しておきます。なお多重実行しようとしたマ
>クロは、「送受信が一段落した時」で指定しているマクロです。このとき
>TransmitAll を使ったマクロを使用していたので、それが原因でしょうか?

 ちょっとエラーメッセージの出し方を間違えてしまったようですが、たしか
にmailpopup.macを実行しようとしてエラーになっているようです。

 でもって、TransmitAllを使った時にマクロが多重実行されるのは、たしか
にそのような動作になっていて、しかもまずい状態です。

 NewMail関数などと同じように、TransmitAllなどで送受信した時には自動実
行マクロを実行しないように修正したいと思いますが、それでいいですよね?

[ ]
RE:05972 マクロの多重実行??No.05976
ひろ さん 01/10/24 17:59
 
 秀まるおさん今日は、ひろです。
>  でもって、TransmitAllを使った時にマクロが多重実行されるのは、たしか
> にそのような動作になっていて、しかもまずい状態です。
>
>  NewMail関数などと同じように、TransmitAllなどで送受信した時には自動実
> 行マクロを実行しないように修正したいと思いますが、それでいいですよね?
 基本的にはそれでよいと思います。
 あと NewEditorMacro などと同様、ReceiveMacro といった関数を用意し
て頂ければ幸いです。

[ ]
RE:05976 マクロの多重実行??No.05977
秀まるお さん 01/10/24 18:19
 
 っと思ったら、TransmitAllの時にはちゃんと自動実行マクロは実行しない
ように処理してました。

 それに、ログを見ると

> 11:47:05.000 (2977) CTrans::AutoDown() exit

 というのがありまして、つまり定期受信が動作した直後にマクロ実行しよう
として失敗しているようです。

 一応、定期受信直後にはマクロの多重実行にならないよう「待機中」のダイ
アログボックスが出るはずなんですが、それが出ないケースがあるようです。
ということで、その線で調べてみます。

[ ]
RE:05977 マクロの多重実行??No.05980
"y.iida" さん 01/10/24 18:38
 
>  一応、定期受信直後にはマクロの多重実行にならないよう「待機中」のダイ
> アログボックスが出るはずなんですが、それが出ないケースがあるようです。
> ということで、その線で調べてみます。

すみません、色々と試しているのですが、まだ再現できません(^^ゞ
って事で、途中経過だけ報告しておきます。

[ ]
RE:05977 マクロの多重実行??No.05981
ひろ さん 01/10/24 18:48
 
 秀まるおさん今日は、ひろです。
> TransmitAllの時にはちゃんと自動実行マクロは実行しない
> ように処理してました。
 あまり使っていない関数なので、気がつきませんでした(^^;。

>  一応、定期受信直後にはマクロの多重実行にならないよう「待機中」のダイ
> アログボックスが出るはずなんですが、それが出ないケースがあるようです。
> ということで、その線で調べてみます。
 宜しくお願いします。

[ ]
RE:05980 マクロの多重実行??No.05984
秀まるお さん 01/10/25 09:42
 
 極まれにおきるということで、原因が判明しました。

 そもそも、マルチスレッドで複数のスレッドが同時にマクロ実行しようとし
た時の排他制御が適当でして、それが原因で複数のマクロを同時に実行しよう
としてしまったのだと思います。下手をすると死んでしまうこともありえるよ
うです。

 mutexを使って確実に判定するように修正させていただきます。

[ ]
RE:05984 マクロの多重実行??No.05986
"y.iida" さん 01/10/25 10:58
 
> 極まれにおきるということで、原因が判明しました。
>
> そもそも、マルチスレッドで複数のスレッドが同時にマクロ実行しようとし
>た時の排他制御が適当でして、それが原因で複数のマクロを同時に実行しよう
>としてしまったのだと思います。下手をすると死んでしまうこともありえるよ
>うです。

了解しました。宜しくお願い致します。

[ ]