找回密码
 立即注册
收起左侧

qt 子线程串口发送数据异常

5
回复
5396
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2018-10-21 17:12:30 显示全部楼层 |阅读模式
1Qter豆
class UartQThread : public QThread

{
  Q_OBJECT
  public:
    UartQThread();
    void run();
private:
    QSerialPort *Uart;
    QString UartPort;
   uint32_t BaudRate;
   uint32_t DataBits;
   QString StopBits;
   QString Parity;
   bool UartReady;
  char readbuff[128];
public:
   void UartInit();
  private slots:
  void UartRead(void);
};

UartQThread::UartQThread()
{
   UartInit();
}
void UartQThread::run()
{
int result;

while(true){    result = Uart->write("this is uart send test456");    qDebug("UartQThread 1000ms test:%d %d", result, Uart->bytesAvailable());    msleep(1000);}

}
void UartQThread::UartInit()
{
Uart = new QSerialPort();
UartReady = false;
connect(Uart,SIGNAL(readyRead()),this,SLOT(UartRead())); //连接槽
// ...... 省略 串口波特率等设置
if(Uart->open(QIODevice::ReadWrite))
{
qDebug("open uart port success");
}
else
{
qDebug()<<"open uart fail"<<UartPort;
}

Uart->write("this is uart send test123");

}

Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
UartQThread *UartProcessD = new UartQThread();
UartProcessD->start();
}
使用QSerialport,UartQThread 继承QThread ,UartInit 后发送一条数据,对端串口收到了 ;但是run 函数中,循环write 发送数据,对端串口只收到一次, 如果将UartInit放到run 里面初始化,一条也发送不出去,也收不到


回复

使用道具 举报

累计签到:41 天
连续签到:1 天
2018-10-21 18:27:54 显示全部楼层
可以试试把下面的代码放到Widget类外面,也就是Widget类对象构造完毕后,单独调用。
UartQThread *UartProcessD = new UartQThread();
UartProcessD->start();
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2018-10-21 18:48:36 显示全部楼层
baizy77 发表于 2018-10-21 18:27
可以试试把下面的代码放到Widget类外面,也就是Widget类对象构造完毕后,单独调用。
UartQThread *UartProc ...

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    UartQThread *UartProcessD = new UartQThread();
    UartProcessD->start();

    return a.exec();
}

谢谢,这样测试了一下,现象是一样的,还是有问题

点评

windows上调试过吗?在run()函数中调试一下。是正常运转但是发送数据失败呢/还是run()函数转了一次就不转了。  详情 回复 发表于 2018-10-22 14:37
回复

使用道具 举报

累计签到:157 天
连续签到:1 天
2018-10-21 23:53:13 显示全部楼层
qDebug()有数据出来吗?会不会是线程遇到什么东西退出来或阻塞了
回复

使用道具 举报

累计签到:41 天
连续签到:1 天
2018-10-22 14:37:08 显示全部楼层
yixuange 发表于 2018-10-21 18:48
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

windows上调试过吗?在run()函数中调试一下。是正常运转但是发送数据失败呢/还是run()函数转了一次就不转了。
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2018-10-22 19:54:20 显示全部楼层
run() 一直在运行,1s qDebug 都有,也可以收到数据
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了