- 主题:有没有人帮我试一下qt的action是异步的吗?
在工具栏上加了一个action,执行一个很长的命令
然后连续用鼠标点击。。。居然发现同时多个任务并行执行
在linux, windows上 qt5.12.12都是如此
有人有新的版本实验下吗
--
FROM 221.219.211.*
问题解决了,好像是调用执行的一个算法是多线程的,与qt产生冲突导致的
全部使用qt的线程不会重现
【 在 iwantfly 的大作中提到: 】
: 在工具栏上加了一个action,执行一个很长的命令
: 然后连续用鼠标点击。。。居然发现同时多个任务并行执行
: 在linux, windows上 qt5.12.12都是如此
: ...................
--
FROM 221.219.211.*
你是不是理解错误了?
整个 Qt GUI 是单线程的,所以 QAction 被点击之后,是同步运行的。
但是你启动的那个任务,可能是又启动了别的线程,点击多次就启动多个线程。
又或者是你用了 signal/slot 连接 QAction 和另外一个线程的工作。
【 在 iwantfly 的大作中提到: 】
: 在工具栏上加了一个action,执行一个很长的命令
: 然后连续用鼠标点击。。。居然发现同时多个任务并行执行
: 在linux, windows上 qt5.12.12都是如此
: ...................
--
FROM 110.81.1.*
没有理解错误。。。
那个人的算法牛逼,能够破坏 Qt的机制,连续点击就同时执行多个任务
把他的算法包装到std::thread也不行
但是我写一个独立的 std::thread sleep就没问题
【 在 hgoldfish 的大作中提到: 】
: 你是不是理解错误了?
: 整个 Qt GUI 是单线程的,所以 QAction 被点击之后,是同步运行的。
: 但是你启动的那个任务,可能是又启动了别的线程,点击多次就启动多个线程。
: ...................
--
FROM 221.219.211.*
是他的算法里面又运行了事件循环吗?还是搞了 fork() ?
【 在 iwantfly 的大作中提到: 】
: 没有理解错误。。。
: 那个人的算法牛逼,能够破坏 Qt的机制,连续点击就同时执行多个任务
: 把他的算法包装到std::thread也不行
: ...................
--
FROM 110.81.1.*
看了半天好像什么也没有,没线程没时间循环
就是基于armadillo的算法库
【 在 hgoldfish 的大作中提到: 】
: 是他的算法里面又运行了事件循环吗?还是搞了 fork() ?
--
FROM 221.219.211.*
哈哈,那你这是玄学修复啊!
【 在 iwantfly 的大作中提到: 】
: 看了半天好像什么也没有,没线程没时间循环
: 就是基于armadillo的算法库
--
FROM 110.81.1.*
终于测出问题了,跟算法没关系,某个20年经验的码农
在处理slot里面加了一句 qApp->processEvents();
导致action响应嵌套调用了
总能弄出些奇特的bug
【 在 hgoldfish 的大作中提到: 】
: 哈哈,那你这是玄学修复啊!
--
FROM 221.219.211.*