首页| 论坛| 消息

标题:嵌入式ARM开发板Cortex-A5,运行Qt程序,黑屏 GUI线程/子线程均正常工作
作者:哥依然潇洒
日期:2017-01-05 15:30
内容:

开发板环境:Linux mcuzone 4.1.0-linux4sam_5.3 #154 Fri Nov 25 18:27:57 CST 2016 armv7l GNU/Linux
由于项目需要,Qt程序需要实时显示从CAN口传来的数据。若把采集数据代码放到MainWindow的Gui线程中,屏幕会假死(qApp->processEvent效果不好),所以开启线程采集数据。第一次开机启动Qt程序时,点击Button弹出Dialog的时,界面会发生抖动(闪屏)界面会黑屏,此时,GUI线程能正常工作(每秒打印一句话),数据子线程也正常工作(能打印),若杀死该程序并重新启动后,闪屏黑屏现象消失,程序能一直正常工作。
若将 thread->start(); 屏蔽,即关闭子线程。则第一次开启只会闪屏,并不会黑屏(%99不黑屏)!
若将子线程中的数据部分全部去掉,第一次开启还是有可能会黑屏的!
关键代码:
MainWindow.cpp
thread = new Thread;
connect(thread,SIGNAL(DISPLAY_DZ_DATA()),this,SLOT(DISPLAY_DZ_DATAMain()));
thread->start();
/***/
thread.h
class Thread : public QThread
{
Q_OBJECT
public:
Thread();
~Thread();
void stop();
protected:
void run();
private:
QMutex mutex;
volatile bool stopped;
uint32_t dlen;
signals:
void DISPLAY_DZ_DATA();
};
/*****/
thread.cpp
Thread::~Thread()
{
}
void Thread::run()
{
int jishuqi = 0;
#if 1
can = 1;
s =PanelSocketCanOpen(can);
#endif
while(threadisrun == 0)
{
mutex.lock();
printf("jishuqi:%d\n",jishuqi);
jishuqi++;
dlen = PanelC ..


#1 [shf1986 01-10 14:37]
用的哪个a5的片子?......
#2 [哥依然潇洒 02-10 11:22]
ATSAMA5D35//这是CPU 班子是mcuzone的,已经坏了,按照他的原理图自己画的新的。没有串口,直接从核心板引出来接的终端!!
#3 回 哥依然潇洒 的帖子 [shf1986 02-10 15:34]
哥依然潇洒:ATSAMA5D35//这是CPU 班子是mcuzone的,已经坏了,按照他的原理图自己画的新的。没有串口,直接从核心板引出来接的终端!! (2017-02-10 11:22) 
我之前搞过a5d36......
#4 回 shf1986 的帖子 [哥依然潇洒 02-14 12:56]
shf1986:我之前搞过a5d36...... (2017-02-10 15:34) 
签名的是不是您的QQ号码,能不能交流一下啊!

回复 发表
主题 版块