99101617 发表于 2024-3-8 13:02:40

多线程执行顺序疑问?

火山模块中的 启动线程() 命令,
如果一次启用多个 启动线程()命令去执行不同的方法,这些线程到底是按启动顺序逐个执行的,还是并发执行的呢?
我测试的结果是按启动顺序一个线程执行完毕后才能执行下一个线程,但问文心一言说启动的线程是并发执行的,不一定按启动顺序来执行。
哪位大佬懂得

99101617 发表于 2024-3-8 13:04:57

如果确实是并发执行,那有什么命令可以控制线程按启动顺序逐个执行,按启动顺序,前一个执行完毕后才能执行下一个,类似于易语言中的 等待线程()

urenai 发表于 2024-3-8 13:36:09

随机            这跟系统线程调度器有关。
linux多线程支持的不好就是因为这玩意,不过最新的linux好像换了线程调度器

Xelloss0618 发表于 2024-3-8 14:17:34

本帖最后由 Xelloss0618 于 2024-3-8 14:19 编辑

线程是按你的代码顺序创建的,线程创建后就是并发执行,互相抢占资源,这个由系统调度。
启动线程最后一个参数就可以等待线程执行完毕,但既然你都要阻塞等待了,还用线程干啥呢?
你这个需求其实也可以用线程池,线程池的任务投递后是排队执行的,推荐PIV模块或火山模块里的线程池对象类。

99101617 发表于 2024-3-8 15:20:07

感谢大佬们,现在懂了,其实问题我写错了,起初是想了解 线程池.启动线程() 这样启动的是否会按启动顺序执行,目前经过测试也一样是并发执行的。

99101617 发表于 2024-3-8 15:25:10

主要是想让一些耗时的功能方法不卡界面,所以用了线程池,又考虑到执行的前后顺序是固定的,用户多次点击会发生问题,就必须控制线程按启动顺序逐个执行,我新建了一个线程状态变量,在启动线程前就判断变量的真假,是否可启动下一线程,进而避免用户多次点击造成崩溃。
页: [1]
查看完整版本: 多线程执行顺序疑问?