火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
楼主: 小小小小鸟
打印 上一主题 下一主题

[视窗] 【源码】多线程和定时器直接调用类内部非静态方法

  [复制链接]

23

主题

516

帖子

4317

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
4317
21#
发表于 2023-12-25 11:42:33 | 只看该作者
学习一下
回复

使用道具 举报

26

主题

1492

帖子

5605

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
5605
22#
发表于 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
    # ---
}


回复

使用道具 举报

27

主题

137

帖子

1696

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1696
23#
发表于 2023-12-25 15:27:16 | 只看该作者
好东西支持下
回复

使用道具 举报

12

主题

100

帖子

1305

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1305
24#
 楼主| 发表于 2023-12-25 15:53:00 | 只看该作者
老道 发表于 2023-12-25 11:39
这种姿势才看到过,SetTimer 的回调函数 直接指定 类内的非静态成员方法 有野路子吗?不想用消息。易语言 ...

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

使用道具 举报

11

主题

171

帖子

1634

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1634
25#
发表于 2023-12-25 16:53:15 | 只看该作者
谢谢分享!!
回复

使用道具 举报

4

主题

78

帖子

822

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
822
26#
发表于 2023-12-25 19:49:23 | 只看该作者
Xelloss0618 发表于 2023-12-25 14:27
也有野路子的,比如是直接用类指针作为时钟ID,然后在回调里将时钟ID还原为类指针去调用类动态方法。

大佬NB !!!!!
回复

使用道具 举报

4

主题

78

帖子

822

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
822
27#
发表于 2023-12-25 19:49:37 | 只看该作者
小小小小鸟 发表于 2023-12-25 15:53
看看我新更新的内容,应该是你需要的···

嗯嗯 都挺好!
回复

使用道具 举报

4

主题

66

帖子

450

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
450
28#
发表于 2023-12-25 20:24:29 | 只看该作者
楼主辛苦了,谢谢楼主,感谢楼主分享,楼主好人一生平安!!!
回复

使用道具 举报

3

主题

12

帖子

119

积分

注册会员

Rank: 2

积分
119
29#
发表于 2023-12-25 20:57:52 | 只看该作者
学习一下 我直接用api cpu占用很高
回复

使用道具 举报

2

主题

133

帖子

2174

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2174
30#
发表于 2023-12-25 23:12:43 | 只看该作者
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-5-11 15:43 , Processed in 0.095561 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表