Project1

标题: API 调用 问题 [打印本页]

作者: kula1900    时间: 2009-12-30 14:50
标题: API 调用 问题
本人需要在 RGSS Player 中加入一个 API 控件
SetTimer  user32.dll 中的一个 安装时间控制器
设置定时器
可惜卡在最后一个参数 上 具体怎么搞请高手详细 解答
TIMERPROC lpTimerFunc // 回调函数
回调函数 应该属于一个 .new 吧 可是 既然是整数型 应该就是一个 地址
可有不像 易语言 可有用 &回调函数 算出 真是麻烦了 呵呵
如果 在RGSS 内部自己用 脚本的话 应该实现 不了 因为我需要 只要一打开 RGSS Player
后 此监视脚本一直运行到结束 为止
最后我发现 看我帖子的人越来越多 回答问题的越来越少 ~ 最后 只能~~o(>_<)o ~~ 泪奔
作者: 紫苏    时间: 2009-12-30 18:20
本帖最后由 紫苏 于 2009-12-31 11:55 编辑

回调函数一般是 Pascal 标准调用约定函数,Ruby 层没这样的东西(除非通过其它语言的接口传递函数的地址),回调由 Method 和 Proc 模拟实现

你可以用线程来计时,或者给 SetTimer 的函数地址参数传 NULL,表示让计时器发送 WM_TIMER 消息到窗口消息队列,交给窗口过程函数处理(参考神思的 RM 窗口过程)

(其实即便是指定了一个回调函数,WM_TIMER 还是会被发送到消息队列,只不过默认的窗口过程函数会在处理 WM_TIMER 的时候会回调你指定的函数)

编辑补充:SetTimer 所产生的 WM_TIMER 消息是一个低优先的消息,在程序并不十分空闲时不一定能做到精确计时,因为 GetMessage 或 PeekMessage 在获取消息的时候会优先获取其它优先级更高的消息~ 如果用线程的话,你可以自定义线程优先级,就不用担心这样的问题了




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1