递归火山软件开发平台

标题: 关于火山方法名静态的问题 [打印本页]

作者: qiken    时间: 2024-8-2 02:21
标题: 关于火山方法名静态的问题
我在火山视窗里面 用一个线程调用 一个方法  那么前提这个方法必须是静态才可以  那么问题来了
我又一个类的成员在普通方法里面可以调用 但是在静态类里面就无法调用了  怎么解决》

如果让静态的方法里面调用一个类的成员变量呢?

作者: 小蜗牛    时间: 2024-8-2 05:15
取程序().类变量.成员 = 1
或者使用这个https://bbs.voldp.com/thread-22654-1-1.html
或者类对象指针过去.. 比如 启动线程(取静态方法(xxx),本对象.取对象指针())

xxx(对象指针){
  读指针处对象(对象指针,当前类名称).成员 = 1
}
作者: qiken    时间: 2024-8-2 08:39
小蜗牛 发表于 2024-8-2 05:15
取程序().类变量.成员 = 1
或者使用这个https://bbs.voldp.com/thread-22654-1-1.html
或者类对象指针过去. ...

取程序()我已经公开类了但还是取不到 变量啊
作者: 创世魂    时间: 2024-8-2 09:18
qiken 发表于 2024-8-2 08:39
取程序()我已经公开类了但还是取不到 变量啊

变量需要公开
作者: qiken    时间: 2024-8-2 09:20
创世魂 发表于 2024-8-2 09:18
变量需要公开

变量也已经公开了老师 但还是取不到什么情况?
作者: Xelloss0618    时间: 2024-8-2 09:32
取程序 返回的是启动类,你的类变量需要能在启动类那边一路访问过来。
线程访问成员变量,还有几个方法。
一、可以用官方的「线程类」,线程方法是在接收事件里编写,可以直接访问类成员变量(注意加锁);
二、用PIV模块或火山模块的 启动动态线程,支持启动类的动态方法,自然也能访问类成员,还支持按值传递任意类型和数量的参数;
作者: qiken    时间: 2024-8-2 09:41
Xelloss0618 发表于 2024-8-2 09:32
取程序 返回的是启动类,你的类变量需要能在启动类那边一路访问过来。
线程访问成员变量,还有几个方法。
...

你好 我用了你说的线程类 事件里调用这个办法可以了 ,但是事件里面这种线程和启动线程命令不知道有没有区别,还有用事件里线程,好像不能线程等待啊  第2种动态线程调用我试了下 好像有点难度 可以写个简单例子啊 谢谢
作者: Xelloss0618    时间: 2024-8-2 09:58
线程类和启动线程没什么区别,也就封装的方式不同。
另外线程等待是啥?线程里直接用延时就行了,其他都是没什么意义的。

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

类 案例 <公开 折叠>
{
    变量 测试对象 <类型 = 测试类>
    变量 成员变量 <类型 = 整数>

    方法 例子 <公开>
    {
        启动动态线程 (本对象, "funcA", "你好", 文本到字节集 ("火山"))
        启动无参数动态线程 (测试对象, "funcB")
    }

    方法 方法A <静态 折叠 @输出名 = "funcA" @强制输出 = 真>
    参数 参数1 <类型 = 文本型>
    参数 参数2 <类型 = 字节集类>
    {
        调试输出 (成员变量, 参数1, 参数2)
    }
}

类 测试类 <折叠>
{
    变量 变量 <公开 类型 = 整数>

    方法 方法 <公开 类型 = 整数 @输出名 = "funcB" @强制输出 = 真>
    {
        返回 (变量 * 2)
    }

    #
}

更多例子看例程:https://saier.lanzoul.com/b016cwvle

作者: qiken    时间: 2024-8-2 15:19
Xelloss0618 发表于 2024-8-2 09:58
线程类和启动线程没什么区别,也就封装的方式不同。
另外线程等待是啥?线程里直接用延时就行了,其他都是 ...

用了你说的线程类事件 经过测试,我发现一个很大问题,就是第一次执行线程类事件时候,如果在线程里面没有退出,比如一直在循环,那么如果再次启动一个线程事件进入就会导致,卡死的现象。或者用了线程,停止命令一样卡死,怎么解决? 也就是说只能执行一次这种线程类事件,第2次就算停止从新执行也会直接卡死
作者: qiken    时间: 2024-8-2 15:29
Xelloss0618 发表于 2024-8-2 09:32
取程序 返回的是启动类,你的类变量需要能在启动类那边一路访问过来。
线程访问成员变量,还有几个方法。
...

线程类事件无法结束。用线程类,停止命令直接卡主  不知道怎么解决
作者: Xelloss0618    时间: 2024-8-2 15:33
qiken 发表于 2024-8-2 15:19
用了你说的线程类事件 经过测试,我发现一个很大问题,就是第一次执行线程类事件时候,如果在线程里面没 ...

一个线程类实例只能同时启动一个线程,多个线程就用多个线程类变量,或者换其他了。
线程类的「退出」不是自动的,需要你在接收事件里用「来源对象.是否需要退出」判断,然后手动返回来退出线程。
作者: qiken    时间: 2024-8-2 16:44
Xelloss0618 发表于 2024-8-2 15:33
一个线程类实例只能同时启动一个线程,多个线程就用多个线程类变量,或者换其他了。
线程类的「退出」不 ...

我感觉这个线程类事件使用简单点,但是我不知道如何结束线程 不会让再次执行的线程卡主,可以教下吗 或者你说的多线程类是哪个》好像没有找到
作者: qiken    时间: 2024-8-2 17:11
Xelloss0618 发表于 2024-8-2 15:33
一个线程类实例只能同时启动一个线程,多个线程就用多个线程类变量,或者换其他了。
线程类的「退出」不 ...

线程类事件这个线程 如何退出啊老师 可以截图下呢
作者: Xelloss0618    时间: 2024-8-2 17:13
qiken 发表于 2024-8-2 16:44
我感觉这个线程类事件使用简单点,但是我不知道如何结束线程 不会让再次执行的线程卡主,可以教下吗 或者 ...

官方都有例子的,菜单「打开-样例解决方案」,视窗项目-杂类-多线程-多线程
我说的是多个线程类……
作者: qiken    时间: 2024-8-2 18:17
Xelloss0618 发表于 2024-8-2 17:13
官方都有例子的,菜单「打开-样例解决方案」,视窗项目-杂类-多线程-多线程
我说的是多个线程类…… ...

我测试了用火山可以用线程类。停止命令 但是我用的 是炫彩界面库 好像用这个命令会直接卡主不知道什么原因
作者: Xelloss0618    时间: 2024-8-2 18:57
qiken 发表于 2024-8-2 18:17
我测试了用火山可以用线程类。停止命令 但是我用的 是炫彩界面库 好像用这个命令会直接卡主不知道什么原 ...

仔细看备注啊,线程类的「停止」,会一直阻塞直到线程结束。
所以你的线程事件必须在收到停止信号后退出。
另外还有个「通知停止」命令,只发出停止信息,不等待线程结束,这个不会卡。
作者: qiken    时间: 2024-8-3 00:27
Xelloss0618 发表于 2024-8-2 18:57
仔细看备注啊,线程类的「停止」,会一直阻塞直到线程结束。
所以你的线程事件必须在收到停止信号后退出 ...

这个停止和停止通知 命令 我试过不大理想。  因为线程如果在访问网页时候,就算你线程里面安排了几个 线程是否退出命令 貌似也容易卡主假死状态。 这个线程命令只合适一次性使用的线程 如果多次使用 就很容易卡主或者线程无法退出 我用起来不大理想 也有可能不大会员。  感觉火山里面的线程没有易语言好用。   有个线程_启动() 线程_等待() 线程_关闭()这3个是精益模块里面的 不知道好不好用 找了好久也没有找到一个能在线程里调用静态方法的 理想线程命令。  官方就不能搞个好用的线程命令吗
作者: Xelloss0618    时间: 2024-8-3 10:09
qiken 发表于 2024-8-3 00:27
这个停止和停止通知 命令 我试过不大理想。  因为线程如果在访问网页时候,就算你线程里面安排了几个 线 ...

这些在第三方模块里有,的确也能立即暂停和结束线程,但这些线程API非常不安全,容易导致死锁,微软的文档严重不建议使用,C++ 标准库的线程也不提供这些功能。
为了安全,火山官方是不会封装的。




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4