#include "mainwindow.h" #include "ui_mainwindow.h" #include #include char readBuf[1024]={0}; Ui::MainWindow *_ui=NULL; class myThread: public QThread{ public: HANDLE obj; DWORD written; OVERLAPPED lapped; myThread(){ obj=CreateFile(L"COM2",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING ,FILE_FLAG_OVERLAPPED//尝试用异步方式 ,NULL); SetupComm(obj,1024,1024); DCB dcb; dcb.BaudRate=9600; dcb.ByteSize=8; dcb.Parity=NOPARITY; dcb.StopBits=1; SetCommState(obj,&dcb); lapped.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);//加了这行以测试 WriteFile(obj,"hello",5,&written,&lapped); } private: virtual void run() override{ while(TRUE){ //编译通过,但是导致电脑卡死,究其原因是循环导致 if(!ReadFile(obj,readBuf,1024,&written,&lapped)){ WaitCommEvent(obj,&written,&lapped); }else{ _ui->textBrowser->insertPlainText(readBuf); } } } }; MainWindow::MainWindow(QWidget *parent):QMainWindow(parent),ui(new Ui::MainWindow) { ui->setupUi(this); _ui=ui; myThread *test=new myThread(); test->start(); test->quit(); } MainWindow::~MainWindow() { delete ui; }