LUAの遅延制御

実現と対話するためのC ++

C ++が提供するスリープ機能を実現することができるLUAに呼び出すことができます。カウントダウン機能に対応する、その後5秒以上とプロンプトなど。

if(funName == L"Sleep") {
	if(lua->CheckParamCount(params, 1)) {
		int sleepMs = lua->ParseInt(THelper::GetLuaParamAt(params, 0));
		DWORD startMoment = GetTickCount();
		int second = 0, total = sleepMs / 1000, lastSecond = 0;
		while(GetTickCount() < startMoment + sleepMs) {
			second = (GetTickCount() - startMoment) / 1000;
			if(sleepMs > 5000 && (second != lastSecond)) {
				lua->LogInfo(THelper::FormatString(L"倒计时: %d 秒", total - second));
				lastSecond = second;
			}
			THelper::Util::Delay(100);
		}
	}
}

あなたはミリ秒の制御を実現したい場合は、C ++は、また何の圧力が存在しないと述べました

他の方法リファレンス

その他のオンラインリソース。として

実行機能パッケージLuaのを遅らせるために、

https://blog.csdn.net/zhenyu5211314/article/details/50437901
機能の遅延実行

function delayTimeGuideEvent( target, func, times )
    -- 延迟时间执行函数
    local delaytime = 1
    if times then delaytime = times end
    getRoot(target):runAction(CCSequence:createWithTwoActions(CCDelayTime:create(delaytime), CCCallFunc:create(func)))
end

LUA遅延関数呼び出し

https://blog.csdn.net/yejian2011/article/details/41173031

-- 延时 0.2 关闭 

    local schedulerEntry = nil

    local    scheduler = cc.Director:getInstance():getScheduler()

    local function removeLayer(time)

        scheduler:unscheduleScriptEntry(schedulerEntry)

        schedulerEntry = nil

        layer:removeFromParentAndCleanup(true)   

    end

    schedulerEntry = scheduler:scheduleScriptFunc(removeLayer, 0.2, false)

スリープ機能

http://lua-users.org/wiki/SleepFunction

一般的な必要性は、好ましくは忙しい待たずに、一定の秒数のためのプログラムを(スリープ)を一時停止することです。
それは株式のLuaには存在しないので、忙しい待機せずにこれを行うには、この関数は、ANSI Cには存在しません。ただし、拡張ライブラリと、これを行うことができ、外部プログラムの呼び出しがあります。

ソリューション:ビジー待機
ローカルクロック= os.clockの
機能スリープ(N) -秒
ローカルT0 =クロック()
しばらくクロック() - T0 <= nのエンド行う
終わりを
-警告:クロックは最終的に十分大きなnにラップアラウンドすることができます
- (その値は、プラットフォームに依存)です。偶数のn == 1の場合、クロック() - T0
-クロックラップすることを第二に負になるかもしれません。
ソリューション:C拡張
ExtensionProposalでスリープ機能があります。これは、Win32スリープまたはPOSIXのはusleepを呼び出すことができます。ここで[はusleep /スリープCラッパー]例です。
LuaAprは、バインディングのWindows&UNIX上で動作し、サポートサブ第2の解像度という[apr.sleep()]の機能を持っています。
lalarmライブラリー[1]はPOSIXにアラームを設定することができます。
WINAPIは、(Windowsのみ)[スリープ]の機能を持っています。[githubの]
FFIインターフェース(エイリアンまたはc /呼び出し- BindingCodeToLuaが)場合は利用可能である、あなたが持っている方のOSの機能を呼び出すことができます。
解決法:スリープコマンド
機能スリープ(n)の
os.execute(「スリープ」... TONUMBER(n))が
終了し
、Windowsが、そのようなaが組み込みコマンドはありません。ただし、Windows Serverリソースキットでの睡眠があります。CygwinとMinGWので睡眠もあります。また、Windows 7で利用可能な「タイムアウト」ユーティリティがあり
os.execute( "タイムアウト" ... TONUMBER(N)) - win7の固有の(そしておそらく高い)
解決策:pingや他のプログラムが
スリープ(n)を機能
0> nの場合は、その後os.execute(「ピング-n "... TONUMBER(N + 1)...は" localhost> NUL」)エンド・
エンド
-バージョン20100715 -オフずつ固定された第2
これは、sleepコマンドが存在しない場合に、Windowsの主です。他のバリエーションは、「 'スリープ(... TONUMBER(N)...」)のperl -e「'」または『スリープ-r PHP(』 ... TONUMBER(N)... 『)など、存在し;』。
ソリューション:I / O待ち
io.stdin:読み取り「* L」
これは睡眠ではありませんが、似たようなケースで有用である可能性があります。これは、Enterキーを押して、ユーザを待ちます。
ソリューション:のWScript(Windowsの場合)使用
機能スリープ(n)を
ローカルVB =「Test.vbsを」
(、)「W」io.open(VB)ローカルF =アサート
F:書き込み(「WScript.Sleep(」...(TONUMBER( N)* 1000)...「)\ n」は)
F:クローズ()
os.execute(VB)
最後
を参照してください[2]。
解決法:スリープ()
POSIXスリープ()の呼び出しは、第二のスリープ整数提供します。
必要「POSIX」
posix.sleep(3)
ソリューション:socket.sleep()
LuaSocket?モジュールは、スリープ機能を提供します。
ソケット=必要とする(「ソケット」)
機能スリープ(秒)
socket.sleep(秒)
終了
スリープ(0.2)
溶液:ngx.sleep()
nginxのLuaのモジュールスリープ機能を提供します。一つは、0.001秒(つまり、1ミリ秒)に、時間解像度アップを指定することができます。シーンの背後に、この方法は、nginxのタイマーを使用しています。
ngx.sleep(秒)
ソリューション:lsocket.select()
あなたはソケットライブラリの依存関係を許容できるかどうかを選択し()タイムアウトは、かなりポータブルサブ秒睡眠を提供します。
ローカルlsocket =(「lsocket」)を必要とする
機能スリープ(秒)
lsocket.select(秒)
エンド
睡眠(2)
解決策:LuaJIT FFI / LuaFFI
ローカルFFIは=「FFI」を必要
ffi.cdef「unsigned int型の睡眠(unsigned int型秒);」
ffi.C.sleep(2)
溶液:os.time()
関数スリープ(S)
ローカルn後やり直し= os.time()+ S
os.time()> n後やり直しを繰り返し
終了
溶液:os.clock()

os.timeは()のみ実行で0.1から何かであることができるタイムスタンプに基づいて間隔を可能にしながらos.clock()メソッドの代わりにos.time()を使用して、第二の100番目のいずれかに精度を降りることができ1秒に。os.time()メソッドは、精度が契約のそれほどではありません2秒以上の長い期間のための素晴らしいです。
...
機能スリープ(S)
局所n後やり直し= os.clock()+ S / 10
os.clock()> n後やり直しの手順を繰り返し
終了

いいえファインケミカルませんし、その後のフォローアップ調査

リリース9件のオリジナルの記事 ウォンの賞賛2 ビュー549

おすすめ

転載: blog.csdn.net/drgraph/article/details/104231779