• 5835阅读
  • 8回复

[提问]多线程?GUI与非GUI程式控制 [复制链接]

上一主题 下一主题
离线琉璃螃蟹
 

只看楼主 正序阅读 楼主  发表于: 2014-06-18
各位大大安

请教一个问题,我手上在做的东西,是在Linux下用QT5写GUI
但是由於需要透过Serialport与另外一块板子沟通
实际控制的程式也必须我这端来做
似乎把控制程式写在GUI的程式里一定会有问题
(因为需要在没有要下指令时,每100ms要与下面控制板沟通一次)

因此我就想,是不是能把用Serialport控制的程式独立出来,用非GUI的方式写
在GUI需要调用到时,再传值进去这样

这样的作法适不适用多线程的方式呢?
或者有什麽别的建议呢?

感谢您的热情回应
离线ysu533

只看该作者 8楼 发表于: 2014-06-21
回 琉璃螃蟹 的帖子
琉璃螃蟹:现在尝试用一个QThread试试
看到版主回复,我先撤回去先前做一半的再试试
....... (2014-06-19 14:50) 

如果是工控, 对实时性有相求, 多线程是有必要的.
离线琉璃螃蟹

只看该作者 7楼 发表于: 2014-06-20
回 dbzhang800 的帖子
dbzhang800:首先,你确保你的 需要含有 Q_OBJECT 是在 .h/.hpp 而不是在 .cpp 中定义的。(或者需要额外的东西)。
其次,一个原来没有 Q_OBJECT 的 .h/.hpp 中添加了一个 Q_OBJECT后,你必须重新运行 qmake(来使得qmake 生成的Makefile文件中对其包含 moc 操作)。
....... (2014-06-19 14:39) 

用继承QObject 的h/cpp ,照版主说的编译过了,但是我在UI 用emit signalSent( XXX)
在 非UI的那个cpp 用connect 的方式接不到(应该是我用法错误)
不知道该怎麽在UI层唤起那个程式

用继承QThread的h/cpp 可以在UI程式里用 open的方式唤起 QThread的run
如果单纯QString处理或传接没问题
可是SerialPort就不行了,有点怪怪的,我再尝试
离线琉璃螃蟹

只看该作者 6楼 发表于: 2014-06-19
现在尝试用一个QThread试试


看到版主回复,我先撤回去先前做一半的再试试



离线dbzhang800

只看该作者 5楼 发表于: 2014-06-19
回 琉璃螃蟹 的帖子
琉璃螃蟹:我很努力写,在专案里新增一个非GUI的C++ Class
并让它继承 QObject  
然後Class里头 使用Q_OBJECT巨集
照标准的Signal & slot的方式,这样无法编译,会有 undefined reference to `vtable for... 的错误
把Q_OBJECT巨集 注解掉,可以编译,但是信号槽 无作用
.... .. (2014-06-19 13:37) 

首先,你确保你的 需要含有 Q_OBJECT 是在 .h/.hpp 而不是在 .cpp 中定义的。(或者需要额外的东西)。

其次,一个原来没有 Q_OBJECT 的 .h/.hpp 中添加了一个 Q_OBJECT后,你必须重新运行 qmake(来使得qmake 生成的Makefile文件中对其包含 moc 操作)。

如果你不想手动运行 qmake,你可以改动一下你的 pro 文件(随便增加一个空格或空行都可以),而后qmake会自动运行。
4条评分好评度+1贡献值+1金钱+3威望+1
琉璃螃蟹 好评度 +1 感谢 2014-06-19
琉璃螃蟹 贡献值 +1 感谢 2014-06-19
琉璃螃蟹 威望 +1 感谢 2014-06-19
琉璃螃蟹 金钱 +3 感谢 2014-06-19
离线琉璃螃蟹

只看该作者 4楼 发表于: 2014-06-19
我很努力写,在专案里新增一个非GUI的C++ Class
并让它继承 QObject  
然後Class里头 使用Q_OBJECT巨集
照标准的Signal & slot的方式,这样无法编译,会有 undefined reference to `vtable for... 的错误
把Q_OBJECT巨集 注解掉,可以编译,但是信号槽 无作用

还是我什麽地方不对了?


基本上我是QT小白,很多其实搞不懂,手边只有一本电子工业出版社出版的 「QT5 开发与实例」

离线dbzhang800

只看该作者 3楼 发表于: 2014-06-19
对于串口这种速度不快的东西,开一个主线程应该就够了吧。异步+QTimer
离线琉璃螃蟹

只看该作者 2楼 发表于: 2014-06-19
回 jnny_cn 的帖子
jnny_cn:单独开线程处理串口通讯就可以 (2014-06-18 21:04) 

感谢回复
我先写一版看看
离线jnny_cn

只看该作者 1楼 发表于: 2014-06-18
单独开线程处理串口通讯就可以
快速回复
限100 字节
 
上一个 下一个