プログラム実行でエラーメッセージNo.05466
Bull さん 10/03/26 08:49
 
こんにちは、お世話になります。

マクロの"runexe"でプログラムを実行して、ある程度時間がかかっていると、
『マクロ内から秀丸エディタを起動したはずですが、10秒待っても応答がありませ
ん。』
というメッセージボックスが出ます。

次のマクロとプログラムで現象が再現します。


--- マクロ
//   プログラムを実行して、標準出力を新規のウィンドウに取り込む
$exefile = leftstr(basename, strlen(basename) - strlen(filetype)) + ".exe";
runex   $exefile,
        1,      //sync    同期
        0, "",  //stdin   なし
        4, "",  //stdout  新規
        1, "",  //stderr  標準出力と同じ
        0, "",  //folder  なし
        0,      //show    非表示
        0,      //nodraw  描画する
        0;      //encode  ANSI
// (0以外の場合)終了コードを表示
#exitcode = getresultex(9);
if (#exitcode != 0) {
    message "終了コードは " + str(#exitcode) + " です";
}
endmacro;


--- Cプログラム
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    int n = 100000;
    int i;
    clock_t st;
    clock_t ed;

    st = clock();
    srand((unsigned)time(NULL));
    for (i = 0; i < n; ++i) {
        printf("%5d ", rand());
        if (i % 10 == 9)
            printf("\n");
    }
    ed = clock();
    printf("%.3f\n", (double)(ed - st) / CLOCKS_PER_SEC);
    return ed - st;
}

メッセージボックスでキャンセルすると、以降は出ませんが、
マクロが終了してしまいます。[再試行]ボタンクリックで
約10秒後に同じエラーになり、以後繰り返しになります。
(メッセージボックスを出したままにする手もありますが...)

標準出力をアウトプット枠にするとエラーにはならないようです。
今までは、プログラム実行の出力はアウトプット枠にしていたのですが、
描画しなければ新規の方が早いようなので、マクロを変更して気付きました。
同期フラグを非同期にすれば出ませんが、プログラムの終了を
待ちたいときもあるので、メッセージはちょっと鬱陶しいです。

マクロの同期状態でのプログラム実行で、一定期間内に終了しない場合
メッセージを出力するという趣旨は理解できるのですが、個人的には
いらないかなあと思っています。
秀丸担当さんの意向や他のユーザーの皆さんのご意見もあると思いますが、
一度ご検討いただけたらと思います。


正規版リリース前のお忙しい時期に申し訳ありません。
余り急いでおりませんので、リリース後でもかまいません。



環境:
Windows XP Pro SP2
秀丸エディタ Version 8.00 b47

[ ]
RE:05466 プログラム実行でエラーメッセーNo.05470
秀丸担当 さん 10/03/26 10:21
 

>マクロの"runexe"でプログラムを実行して、ある程度時間がかかっていると、
>『マクロ内から秀丸エディタを起動したはずですが、10秒待っても応答がありませ
>ん。』
>というメッセージボックスが出ます。

このエラーはV8.00βから seterrormode で出さないようにすることができるよ
うになりました。
マクロの先頭に

  seterrormode 1,0;

と入れておくと出ないようになるのではないかと思います。

[ ]
RE:05470 プログラム実行でエラーメッセーNo.05471
Bull さん 10/03/26 12:34
 
秀丸担当さん
>このエラーはV8.00βから seterrormode で出さないようにすることができるよ
>うになりました。
>マクロの先頭に
>
>  seterrormode 1,0;
>
>と入れておくと出ないようになるのではないかと思います。

ありがとうございます、思い通りの結果になりました。
seterrormode文の説明は読んでいたのですが、
意味をまったく理解していませんでした。


本題とは少し離れますが、runex のパラメーターについて教えて下さい。
表示フラグなのですが、マクロのヘルプには

> 表示フラグ(数値)
>  0:非表示
>  1:表示

と記述されていますが、メニューからプログラム実行を選んだ場合、
ダイアログのウィンドウ表示には自動という項目があります。
マクロから実行した場合で"0:非表示"にしても標準出力等の
が無い場合に、ウィンドウが表示されるようです。
0 を指定した場合は自動と言うことでしょうか?
もしそうでしたら、2 で非表示ですか?

[ ]
RE:05471 プログラム実行でエラーメッセーNo.05472
秀丸担当 さん 10/03/26 12:46
 

>> 表示フラグ(数値)
>>  0:非表示
>>  1:表示
>
>と記述されていますが、メニューからプログラム実行を選んだ場合、
>ダイアログのウィンドウ表示には自動という項目があります。
>マクロから実行した場合で"0:非表示"にしても標準出力等の
>が無い場合に、ウィンドウが表示されるようです。
>0 を指定した場合は自動と言うことでしょうか?
>もしそうでしたら、2 で非表示ですか?

全くご指摘の通りでした。
ダイアログでは3つ選択肢があるのにおかしかったです。
0が自動で、1が表示、2が非表示でした。
ご指摘いただいて助かりました。
ヘルプを修正しておきます。

[ ]