乐易论坛 发表于 2024-9-15 21:22:57

程序_延时_内核

程序_延时_内核
<火山程序 类型 = "通常" 版本 = 1 />

方法 程序_延时_内核 <公开 静态 类型 = 逻辑型 注释 = "不占用cpu,窗口不卡死,不影响其它代码执行" @禁止流程检查 = 真 @输出名 = "SleepByNt">
参数 参_延时间隔 <类型 = 整数 注释 = "1000毫秒 = 1秒留空为不等待" @默认值 = -1>
{
    变量 局_真实时间 <类型 = 长整数 @输出名 = "dwMilliseconds">
    @ typedef INT_P (WINAPI* ZwDelayExecution)(
    @ BOOLbAlertable,
    @ PLARGE_INTEGER dwMilliseconds
    @ );
    @ HMODULE timeNTDLL = GetModuleHandle(L"ntdll"); //取出NTDLL的句柄
    @ ZwDelayExecution pZwDelayExecution = (ZwDelayExecution)::GetProcAddress(timeNTDLL, "ZwDelayExecution");
    局_真实时间 = -参_延时间隔 * 10000
    @ return pZwDelayExecution(false,(PLARGE_INTEGER)&dwMilliseconds) == 0;

}


yuangao 发表于 2024-9-15 22:28:19


程序_延时_内核 (5000)
// 界面延时 (5000)
标签1.标题 = "不卡死"

貌似窗口也卡住的, 新手还请谅解。

Xelloss0618 发表于 2024-9-15 22:37:57

yuangao 发表于 2024-9-15 22:28
程序_延时_内核 (5000)
// 界面延时 (5000)
标签1.标题 = "不卡死"


Sleep (普通延时)函数的实现会调用到 ZwDelayExecution,所以这玩意的作用根本不是界面延时。

yuangao 发表于 2024-9-15 23:25:41

Xelloss0618 发表于 2024-9-15 22:37
Sleep (普通延时)函数的实现会调用到 ZwDelayExecution,所以这玩意的作用根本不是界面延时。 ...

感谢,大佬的解释。

乐易论坛 发表于 2024-9-15 23:48:46

yuangao 发表于 2024-9-15 22:28
程序_延时_内核 (5000)
// 界面延时 (5000)
标签1.标题 = "不卡死"


这个不卡死的的说法 是从易语言的延时 延伸过来的 主要指的是 不暂停程序运行..:噜阿噜 备注啥的 直接复制的 懒得改了...

yuangao 发表于 2024-9-17 08:41:48

乐易论坛 发表于 2024-9-15 23:48
这个不卡死的的说法 是从易语言的延时 延伸过来的 主要指的是 不暂停程序运行..:噜阿噜 备注啥的 直接复 ...

好,好,明白

ziyoulang168 发表于 3 小时前

论坛里的这个复制代码不能用,请后台调配下@飞翔的企鹅
页: [1]
查看完整版本: 程序_延时_内核