特殊なスリープと解除

概要

Hm.NetCOMでは「特殊なスリープによって処理をブロックしつつ、
何かの入力(マウス・キーボード)」を得ると解除する、という処理を行うことが出来ます。

この処理は秀丸から提供されているものをそのまま提供しているにすぎず、
原則的にはこのようなスリープを利用した処理は設計を間違っていることが大半であり、
推奨されません。

特殊なスリープと解除

マクロ中でもマクロ中以外でも、常時取得することが出来ます。

Hm.Edit.isQueueStatus()
  • C++側のソース

    dllmain.cpp
    #include "HmCppInvoke.h"
    
    using namespace Hidemaru;
    using namespace std;
    
    extern "C" __declspec(dllexport) THmNumber test() {
        Hm.funcDllExport();
    
        // 何かキーの入力があるのを待機してチェックする。
        int icount = 0;
        while (true)
        {
            Sleep(50);
            if (Hm.Edit.isQueueStatus())
            {
                Hm.OutputPane.output(L"入力を得た!\r\n");
                break;
            }
    
            icount++;
            if (icount % 30 == 0) {
                Hm.OutputPane.output(L"入力を待機中...\r\n");
            }
        }
    
        return 1;
    }
    
  • 実行すると、whileとSleepによってブロックされるため、
    入力待ち(該当の秀丸プロセスが処理を進めずに待機)のような状態となります。
    マウスの入力や、キーボードの入力により、「(Hm.Edit.QueueStatus」が真となり、
    処理が先へと進んでいくといったものとなります。

    このように「Hm.Edit.QueueStatus」は「Sleepのような処理を止めるものと併せて」使うこととなりますが、
    このような処理をすること自体あまり良いことではありませんので、
    この「Hm.Edit.QueueStatus」の利用は特殊な用途を除いては、避けることをお勧めします。