QT嵌入式程序 运行10分钟就卡死 界面不动

疯而不觉 2017-07-13 10:33:22

[/code]
#include "conHttp.h"
#include <QMessageBox>
#include <QtDebug>
#include <QThread>
#include <QObject>
#include "Widget.h"
#include "static_public.h"
#include<QMessageBox>
#include <QCoreApplication>
#include <QtDebug>

conHttp::conHttp(Widget *parent)
{
myCom3 = new Posix_QextSerialPort("/dev/ttySAC2",QextSerialBase::Polling);
myCom3 -> open(QIODevice::ReadWrite);
myCom3 -> setBaudRate(BAUD9600);
myCom3 -> setDataBits(DATA_8);
myCom3 -> setParity(PAR_NONE);
myCom3 -> setStopBits(STOP_1);
myCom3 -> setFlowControl(FLOW_OFF);
myCom3 -> setTimeout(10);

httpOnFlag = false;

threadWidget = parent;


sendResultCount = 0;

// timerResult = new QTimer(this);
// connect(timerResult,SIGNAL(timeout()),this,SLOT(HttpSendResult()));
//timerResult->moveToThread(this);

threadStop = false;

sendCIPSHUT = "AT+CIPSHUT\r\n";//关闭网络
sendCIPSEND1 = "AT+CIPSEND=1\r\n";
sendCIPSEND2 = "AT+CIPSEND=2\r\n";
sendCIPSTATUS = "AT+CIPSTATUS\r\n";//判断连接状态


}

conHttp::~conHttp()
{

}

void conHttp::run(){
qDebug()<<" thread run:" <<QThread::currentThreadId();


// while(!threadStop){
if(choose == "start"){
choose = "NULL";
qDebug()<<" start";
HttpOn();
if(httpOnFlag){
emit stringChanged("connect");
httpFlag = true;
}
else{
emit stringChanged("notConnect");
}
}
else if(choose == "stop"){
choose = "NULL";
qDebug()<<" stop";
HttpOff();
httpFlag = false;
}
else if(choose == "send"){
choose = "NULL";
qDebug()<<" send";
qDebug() << "5";
HttpSendData();
}


qDebug() << "end!!!!!!!!!!!";

}


void conHttp::httpConnect(){
//qDebug()<<" thread start:" <<QThread::currentThreadId();
choose = "start";
}

void conHttp::httpBreak(){
//qDebug()<<" thread break:" <<QThread::currentThreadId();
choose = "stop";
}

void conHttp::httpSend(QString str){
//qDebug()<<" thread send:" <<QThread::currentThreadId();
qDebug() << "4";
sendHTTPPARA = str;
choose = "send";
}



//连接指令
void conHttp::HttpOn(){

QString temp;
QStringList str;
QString sendStr[6] = {"AT+CIPMUX=1\r\n",
"AT+CSTT\r\n",
"AT+CIICR\r\n",
"AT+CIFSR\r\n",
"AT+CIPSTART=1,\"TCP\",\"" + static_public::IP1 + "\",\"" + static_public::Port1 + "\"\r\n"
"AT+CIPSTART=2,\"TCP\",\"" + static_public::IP2 + "\",\"" + static_public::Port2 + "\"\r\n"};

for(int i= 0;i < 6; i++){

myCom3->readAll();
myCom3->write(sendStr[i].toLatin1());
sleep(1);
}

sleep(5);
temp = myCom3->readAll();
qDebug() << "sendstr" << ":" << temp;
str = temp.split("\r\n",QString::SkipEmptyParts);
qDebug() <<"str"<<str;
qDebug() << "str.count:" << str.count();

if(!str.empty()){
if(str.at(0).endsWith("K") && str.at(1).endsWith("K")){
qDebug() << "test ok";
httpOnFlag = true;//con << "7";nect ok

}
else{
httpOnFlag = false;//connect error
qDebug() << "no ok";
HttpOff();
return;
}
}
}

//断开指令
void conHttp::HttpOff(){
qDebug() << "HttpOff";
myCom3->write(sendCIPSHUT.toLatin1());
sleep(1);
}


//发送数据
void conHttp::HttpSendData(){
qDebug() << "thread HttpSendData:" <<QThread::currentThreadId();
qDebug() << "HttpSendData";
qDebug() << "httpFlag:" << httpFlag;
qDebug() << "httpOnFlag:" << httpOnFlag;

// char send1A[] = {0x1A};
QString StateConnect;
QStringList list;

qDebug() << "6";
QByteArray send1A;
send1A.resize(1);
send1A[0] = 0x1A;

if(!httpFlag){
qDebug()<<"return qian";
return;

}

//判断连接状态
myCom3->write(sendCIPSTATUS.toLatin1());
sleep(2);
StateConnect = myCom3->readAll();
list = StateConnect.split(":",QString::SkipEmptyParts);
for(int h = 0; h < list.count(); h++){
qDebug() << "StateConnect" << list.at(h);
}

/* if(list.count() > 3&& list.at(3).trimmed() != "CONNECTED"){
qDebug() << "disconnect";
int i=0;
HttpOn();
while (!httpOnFlag) {
qDebug() << "httpflagwhile";
HttpOff();
HttpOn();
i++;
if(i >4){
return;
}
}
}*/

if(httpOnFlag){
myCom3->write(sendCIPSEND1.toLatin1());
sleep(2);
myCom3->write(sendHTTPPARA.toLatin1());
sleep(2);
myCom3->write(send1A);
sleep(2);
myCom3->write(sendCIPSEND2.toLatin1());
sleep(2);
myCom3->write(sendHTTPPARA.toLatin1());
sleep(2);
myCom3->write(send1A);


#if 1
sleep(2);
qDebug() << myCom3->readAll();
#endif

}
qDebug() << "7";
}
这是一部分代码,之前没有过这种问题,就是点击开始时候,会用定时器采集数据发送数据
...全文
3342 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
春云者 2018-01-23
  • 打赏
  • 举报
回复
楼主问题解决了吗?我现在也遇到相似的问题,进入报文打印页面让报文实时刷新(1s一次),刷新发生在QTextEdit组件上,运行一段时间后点击返回主界面就卡死了,此时Qt的其它响应是正常的,包括鼠标点击事件也能正常下发。除了界面死掉其它一切正常。我也找了无数资料没有发现问题,如果楼主解决了希望能不吝赐教,谢谢!
lyz007 2018-01-05
  • 打赏
  • 举报
回复
确认一下系统有没有死机?有可能系统裁剪有问题
Acuity. 2017-12-26
  • 打赏
  • 举报
回复
好像没问题?一定要百分百确定。 小学用的排除法很好使。
疯而不觉 2017-12-26
  • 打赏
  • 举报
回复
硬件好像应该没问题
  • 打赏
  • 举报
回复
先确认是不是硬件问题,再看是不是代码问题。如果是硬件问题,你在代码这里找问题找死都找不到。可以通过其他方式确认一下硬件有问题。按你的说法是之前没问题的代码现在跑都有问题,我觉得很有可能就是硬件问题。
疯而不觉 2017-07-13
  • 打赏
  • 举报
回复
整个程序是这样的 我点击开始 程序定时器启动。然后运行线程去采集数据。之前没有这个问题 ,现在出现了。但是用以前没出问题的源码运行也是这样。所以我也不知道是程序还是硬件问题。
jklinux 2017-07-13
  • 打赏
  • 举报
回复
楼主的硬件应是接上gprs模块吧, 如果确定代码没问题的话,建议用电流大点的电源来试下, 功率不够也会工作不正常的

16,201

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧