EnvChanged 関数No.04174
Iranoan さん 12/06/16 13:19
 
 秀まるおさん今日は、Iranoan です。
 正確には分からないのですが、最近の更新で EnvChanged 関数の処理に非常
に時間がかかるようになりました。EnvChangedDanger 関数や秀丸エディタの
envchanged 文に比べると、200〜500 倍ほどかかります。これは仕方がない事
でしょうか?
 こちらの環境は、Windows7+IE8.0+秀丸メール Ver. 5.76beta12 です。

[ ]
RE:04174 EnvChanged 関数No.04175
秀まるお さん 12/06/16 18:22
 
 こちらで簡単なマクロを作ってテストした限りは遅くないようではありますが、
たぶん、β12でいじった処理が関係して遅くなってるんだと思います。

 こちらでテストしたのは、例えば適当な添付ファイル付きメールを1つ開いた
状態で、秀丸メール本体ウィンドウ上で、

    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    #UnderAttach = getregnum("UnderAttach");
    if( #UnderAttach ) {
        #UnderAttach = 0;
    } else {
        #UnderAttach = 1;
    }
    writeregnum "UnderAttach", #UnderAttach;
    closereg;
    loaddll "tkinfo.dll";
    #n = dllfunc( "EnvChanged" );


 ってなマクロを実行するテストですけども、これだと特に遅いことは無いよう
でした。

 たぶんエディタ・ウィンドウに関係した何かの設定が書き換わってる場合に遅
いんじゃないかと思いますけど、何か分からないでしょうか。

 ちなみにβ12でいじったのは、SendMessageTimeoutでのパラメータで、
SMTO_NORMALって指定してあったのを全部SMTO_BLOCKに書き換えました。これの
せいで、例えばSendMesageTimeoutしてる先からさらにその呼び出し元に対して
逆方向のSendMessageTimeout呼び出しした時に、タイムアウトするまで固まって
しまうケースがあるのだと思います。

 SMTO_BLOCK | SMTO_ABORTIFHUNG

 を指定すればとりあえず固まる現象は回避出来るのかなぁと思いますけども、
再現出来ればその辺はっきりするので、出来たら再現方法を特定したい所です。
何かヒントがあったらお願いします。

[ ]
RE:04175 EnvChanged 関数No.04176
Iranoan さん 12/06/16 18:47
 
 秀まるおさん今日は、Iranoan です。
>  たぶんエディタ・ウィンドウに関係した何かの設定が書き換わってる場合に遅
> いんじゃないかと思いますけど、何か分からないでしょうか。
 確かにエディタ・ウィンドウに関して設定を書き換えています。
> writeregnum "EditMacAssign",0;
<snip>
> writeregnum "NumWord",##num;
をやっています。

 これ以外は、レジストリ・オープンとデータ読み込みだけです。

[ ]
RE:04176 EnvChanged 関数No.04177
秀まるお さん 12/06/16 23:37
 
 "EditMacAssign"でテストしたんですが、いまいち再現出来ませんでした。

 "NumWord"の方は秀丸エディタの設定なので、EnvChangedの場合は関係無いと
思います。

 ですが、一応、SendMessageTimeoutのパラメータをいじったことが関係してる
はずなので、意図的にSendMessageTimeoutされた側からしてる側に
SendMessageTimeoutするテストをしたら、やはりタイムアウトするまで固まる現
象が再現出来ました。エディタ・ウィンドウ1つにつき2秒固まる計算になりま
す。

 なので、この場合のSendMessageTimeoutはSMTO_BLOCKじゃなくてSMTO_NORMAL
で呼び出すように修正してみます。それで直るはずだと思います。

 もしかして次のβ版(V5.76β13)でもダメでしたら、また連絡お願いします。

 ちなみにテストマクロ:

    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    #EditMacAssign = getregnum("EditMacAssign");
    if( #EditMacAssign ) {
        #EditMacAssign = 0;
    } else {
        #EditMacAssign = 1;
    }
    writeregnum "EditMacAssign", #EditMacAssign;
    closereg;
    loaddll "tkinfo.dll";
    #n = dllfunc( "EnvChanged" );

[ ]
RE:04177 EnvChanged 関数No.04178
Iranoan さん 12/06/16 23:40
 
 秀まるおさん今日は、Iranoan です。
>  なので、この場合のSendMessageTimeoutはSMTO_BLOCKじゃなくてSMTO_NORMAL
> で呼び出すように修正してみます。それで直るはずだと思います。
>
>  もしかして次のβ版(V5.76β13)でもダメでしたら、また連絡お願いします。
 解りました。

[ ]
RE:04177 EnvChanged 関数No.04180
Iranoan さん 12/06/18 19:24
 
 秀まるおさん今日は、Iranoan です。
>  もしかして次のβ版(V5.76β13)でもダメでしたら、また連絡お願いします。
 変化はありませんでした。

[ ]
RE:04180 EnvChanged 関数No.04181
秀まるお さん 12/06/18 23:02
 
 ってことは、ちょっと遅い理由が分からずです。

 dump.txtにログを出すようにしておけばよかったです。

 再現用のマクロをご提供いただくってのは無理でしょうか。

 どっちにしても、次のβ版にはdump.txtへの出力をいろいろ追加しようと思い
ます。

[ ]
RE:04180 EnvChanged 関数No.04182
秀まるお さん 12/06/18 23:03
 
 または、時間のかかってる最中にHangup Checkerのアイコンをダブルクリック
してログ出力していただく作戦でもいいです。そっちの方が手っ取り早いと思い
ます。

 エディタ・ウィンドウを10個くらい起動した状態でEnvChanged関数呼び出し
していただければ、たぶん20秒くらいは固まってくれるんじゃないかと思いま
す。その間ならダブルクリックもしやすいと思います。

[ ]
RE:04182 EnvChanged 関数No.04183
秀まるお さん 12/06/19 09:40
 
 送っていただいたマクロで原因が分かりました。エディタウィンドウ上から
ExecAtを使ってEnvChangedするとダメでした。

 ExecAt/ExecAtMain関数の中でもSendMessageTimeoutを使っていて、そこも
SMTO_NORMALからSMTO_BLOCKに変更してました。

 さっそく修正させていただきます。


 サンプルマクロ(エディタ上で実行用)

    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    #EditMacAssign = getregnum("EditMacAssign");
    if( #EditMacAssign ) {
        #EditMacAssign = 0;
    } else {
        #EditMacAssign = 1;
    }
    writeregnum "EditMacAssign", #EditMacAssign;
    closereg;
    loaddll "tkinfo.dll";
    ##main = dllfunc("MainWnd");
    message "start";
    #tmp = dllfunc("ExecAt",##main,"EnvChanged");
    message "end";

[ ]
RE:04183 EnvChanged 関数No.04184
Iranoan さん 12/06/19 09:54
 
 秀まるおさん今日は、Iranoan です。
>  送っていただいたマクロで原因が分かりました。エディタウィンドウ上から
> ExecAtを使ってEnvChangedするとダメでした。
<snip>
>  さっそく修正させていただきます。
 有り難うございます。

[ ]
RE:04184 EnvChanged 関数No.04185
秀まるお さん 12/06/22 09:25
 
 先ほど修正版をアップロードしました。

32bit版:
http://hide.maruo.co.jp/software/bin/hmmail576b14_signed.exe

64bit版:
http://hide.maruo.co.jp/software/bin/hmmail576b14_x64_signed.exe

 よろしくお願いします。

[ ]