【非推奨】wait相当の動作をするはずのモジュール

HSP 3.6 β3
コールバックルーチン中のwaitが使用できなくなったので、自前でメッセージループを処理してwait相当の処理をするモジュール。
おすすめはしないです。

HSP 3.6 β3
コールバックルーチン中のwaitが使用できなくなったので、自前でメッセージループを処理してwait相当の処理をするモジュール。
おすすめはしないです。

  • hk1v
  • 2020/7/5 23:49
  • タグ:
  • タグはありません
// モジュール開始
#module waithack
#uselib "user32.dll"
#func PeekMessageA "PeekMessageA" sptr,sptr,int,int,int
#func GetMessageA "GetMessageA" sptr,int,int,int
#func TranslateAccelerator "TranslateAcceleratorA" int,int,sptr
#func TranslateMessage "TranslateMessage" sptr
#func DispatchMessageA "DispatchMessageA" sptr
#uselib "kernel32.dll"
#func Sleep "Sleep" int
#uselib "winmm.dll"
#cfunc timeGetTime "timeGetTime"
#undef wait
#deffunc wait int p1, \
	local st, local wt, local MSG, local pMsg
	
	dim MSG, 7 : pMsg = varptr(MSG)
	wt = p1 * 10
	st = timeGetTime()
	repeat
		;PeekMessageA pMsg, 0, 0, 0, 0		// await的なのならこっちか
		;if stat != 0 {
			GetMessageA pMsg, 0, 0, 0
			if stat == 0 : end
			if stat != -1 {
				TranslateMessage pMsg
				DispatchMessageA pMsg
			}
		;}
		if (timeGetTime() - st) > wt : break
	loop
return
#global
// モジュール終了

// 以下サンプル

	onclick gosub *jump
stop
*jump
	wait 100
	mes "aaa"
return