QtGui5未加载

时间:2015-11-01 17:30:42

标签: c++ multithreading qt winapi

我正在C++winApiQt开发一个应用程序。该应用程序的作用是通过串行COM端口进行通信。 用户可以打开多对端口,打开的端口可以不断地侦听其他端口。 为了实现这个功能,我使用了windows threads.There方法名为startRead(),可以不断地从其他端口读取并更改文本区域。

void SendAndReceive::startRead(){

    DWORD numRead = 0;
    std::string hex;

    while (1)
    {
        char *buffer = (char *)malloc(sizeof(char) * 500);
        BOOL ret = ReadFile(portHandler, buffer, 500, &numRead, 0);
        if (!ret)
        {
            std::string errorMessage = "";
        }
        buffer[numRead] = '\0';
        std::string receivedData(buffer);
        QString QData(receivedData.c_str());
        if (ui->checkBox->isChecked())
        {
            std::string receivedData(buffer);
            hex= stringToHex(receivedData);
            QString QData1(hex.c_str());
            emit asHex(QData1);
        }

        QString QData2(receivedData.c_str()) ;
        emit finished(QData2);
        free(buffer);
    }
}

还有另一个线程会定期将数据写入其他端口。例如,如果在文本行中输入2秒,则程序每2秒将数据写入其他端口,此方法为writePeriodic()

void SendAndReceive::writePeriodic(){
    DWORD numWritten;
    while (1 && checkWrite == true )
    {
        Concurrency::wait(timePeriod*1000);
        QString QData = ui->textEdit->toPlainText();
        std::string data = QData.toStdString();
        WriteFile(portHandler, data.c_str(), strlen(data.c_str()), &numWritten, NULL);
    }
}

因此,当我运行这个程序时,程序运行平稳2或3分钟然后它崩溃,我得到错误,如“程序已停止工作”,“程序意外关闭”。当我调试程序时,它说“像” Qt5Core未加载“或”Qt5Gui未加载“。

在我问这里之前,我在网上做了一些搜索。首先我没有使用emit finished(QString)信号,而是直接操作startRead()方法中的GUI对象。(我做了ui->text_edit->setText(some QString)之类的事情。)但经过一些搜索后我才知道我无法更改GUI来自另一个线程的对象,所以我决定使用信号和插槽机制,到目前为止它还没有解决我的问题。我一次又一次地得到同样的错误。请告诉我我做错了什么。如果您需要进一步解释,我很乐意提供更多细节。

0 个答案:

没有答案