glbosom 发表于 2023-12-25 11:42:33

学习一下

Xelloss0618 发表于 2023-12-25 14:27:55

老道 发表于 2023-12-25 11:39
这种姿势才看到过,SetTimer 的回调函数 直接指定 类内的非静态成员方法 有野路子吗?不想用消息。易语言 ...

也有野路子的,比如是直接用类指针作为时钟ID,然后在回调里将时钟ID还原为类指针去调用类动态方法。


<火山程序 类型 = "通常" 版本 = 1 />

类 窗口时钟类 <公开 折叠>
{
    方法 类_清理 <折叠>
    {
      结束时钟 ()
    }

    方法 启动时钟 <公开 类型 = 逻辑型 注释 = "启动时钟,重复启动将替换之前的时钟,可以当作是修改周期时间." 折叠 @禁止流程检查 = 真>
    参数 窗口句柄 <类型 = 变整数 注释 = "请提供主窗口的句柄">
    参数 周期时间 <类型 = 整数 注释 = "时钟运行的周期时间,以毫秒为单位">
    {
      @ m_hwnd = reinterpret_cast<HWND>(@<窗口句柄>);
      @ return (::SetTimer(m_hwnd, reinterpret_cast<UINT_PTR>(this), static_cast<UINT>(@<周期时间>), &@sn<current_class_def>::Timerproc) != 0);
    }

    方法 结束时钟 <公开 类型 = 逻辑型 注释 = "结束时钟" 折叠 @禁止流程检查 = 真>
    {
      @ return ::KillTimer(m_hwnd, reinterpret_cast<UINT_PTR>(this));
    }

    方法 周期时间 <公开 属性写 注释 = "修改当前的周期时间" 折叠>
    参数 周期时间 <类型 = 整数 注释 = "时钟运行的周期时间,以毫秒为单位">
    {
      @ if (m_hwnd != NULL)
      @   ::SetTimer(m_hwnd, reinterpret_cast<UINT_PTR>(this), static_cast<UINT>(@<周期时间>), &@sn<current_class_def>::Timerproc);
    }

    方法 时钟事件 <公开 定义事件 类型 = 整数 注释 = "每当经过了指定的时钟周期,将发送本事件." 注释 = "注意: 本事件在主窗口的消息循环中执行,请勿执行耗时操作,否则会卡界面."
            返回值注释 = "此返回值无意义" 折叠>
    参数 窗口句柄 <类型 = 变整数 注释 = "返回与时钟关联的窗口句柄">
    参数 启动时间 <类型 = 整数 注释 = "系统启动后经过的毫秒数,与\"取启动时间\"一致.">

    # ---
    # @begin
    # <> <include>
    # HWND m_hwnd = NULL;
    # static VOID CALLBACK Timerproc (HWND hwnd, UINT message, UINT_PTR iTimerID, DWORD dwTime) {
    #   reinterpret_cast<@sn<current_class>*>(iTimerID)->@<时钟事件>(reinterpret_cast<INT_P>(hwnd), static_cast<INT>(dwTime));
    # }
    # <> </include>
    # @end
    # ---
}


Creator 发表于 2023-12-25 15:27:16

好东西支持下

小小小小鸟 发表于 2023-12-25 15:53:00

老道 发表于 2023-12-25 11:39
这种姿势才看到过,SetTimer 的回调函数 直接指定 类内的非静态成员方法 有野路子吗?不想用消息。易语言 ...

看看我新更新的内容,应该是你需要的···

高山!&流水 发表于 2023-12-25 16:53:15

谢谢分享!!

老道 发表于 2023-12-25 19:49:23

Xelloss0618 发表于 2023-12-25 14:27
也有野路子的,比如是直接用类指针作为时钟ID,然后在回调里将时钟ID还原为类指针去调用类动态方法。




大佬NB !!!!!

老道 发表于 2023-12-25 19:49:37

小小小小鸟 发表于 2023-12-25 15:53
看看我新更新的内容,应该是你需要的···

嗯嗯 都挺好!

次元の叶子 发表于 2023-12-25 20:24:29

楼主辛苦了,谢谢楼主,感谢楼主分享,楼主好人一生平安!!!

zhizizhis 发表于 2023-12-25 20:57:52

学习一下 我直接用api cpu占用很高

888888 发表于 2023-12-25 23:12:43

谢谢分享
页: 1 2 [3] 4 5 6 7 8 9
查看完整版本: 【源码】多线程和定时器直接调用类内部非静态方法