Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 同时发送多个CAN信号_C++_Multithreading_Qt_Can Bus - Fatal编程技术网

C++ 同时发送多个CAN信号

C++ 同时发送多个CAN信号,c++,multithreading,qt,can-bus,C++,Multithreading,Qt,Can Bus,我一直试图同时发送多个CAN信号。当选择每个要发送的信号时,信号会重复发送,直到其周期长度,如果我必须随信号一起发送更多信号,它会留在队列中。我需要同时运行多个信号,并在GUI中查看它们的输出 是否可以使用上述功能 我发出多个信号的代码是: foreach(QString payload_id, payload_send_final) { const QByteArray payload = QByteArray::fromHex(payload_id.r

我一直试图同时发送多个CAN信号。当选择每个要发送的信号时,信号会重复发送,直到其周期长度,如果我必须随信号一起发送更多信号,它会留在队列中。我需要同时运行多个信号,并在GUI中查看它们的输出

是否可以使用上述功能

我发出多个信号的代码是:

        foreach(QString payload_id, payload_send_final) {
            const QByteArray payload = QByteArray::fromHex(payload_id.remove(QLatin1Char(' ')).toLatin1());
            frame = QCanBusFrame(frameId, payload);
            if(m_ui->cycle_check->isChecked())
                emit sendFrame(frame,cycle_len.at(i));
            else
                emit sendFrame(frame,"1");

            i = i + 1;
        }
写入Can信号如下:

    m_frame_list.enqueue(frame);
    send_frame_str = frame.toString();
    QTimer timer;
    int i = 1;

    while (!m_frame_list.isEmpty()) {
        QCanBusFrame m_frame = m_frame_list.dequeue();
        while ( i <= cycle.toInt()) {
            m_canDevice->writeFrame(frame);
            delay(5500);
            i = i+1;
        }
    }
m_frame_list.enqueue(frame);
send_frame_str=frame.toString();
定时器;
int i=1;
而(!m_frame_list.isEmpty()){
qcanbusrame m_frame=m_frame_list.dequeue();
while(i writeFrame(frame);
延迟(5500);
i=i+1;
}
}
延迟函数为

void MainWindow::delay( int millisecondsToWait )
{
    QTime dieTime = QTime::currentTime().addMSecs( millisecondsToWait );
    while( QTime::currentTime() < dieTime )
    {
        QCoreApplication::processEvents( QEventLoop::AllEvents, 100 );
    }
}

void主窗口::延迟(int毫秒)
{
QTime dieTime=QTime::currentTime().addMSecs(毫秒级);
while(QTime::currentTime()

提前谢谢你

你说的“同时”是什么意思?在一条总线上?发送时,
周期的值是多少?延迟函数是什么?如果延迟函数等待给定的毫秒数,则内部while循环需要
5.5秒*周期*队列大小
。我的意思是我想同时向CanBus发送多个信号,并从ocu接收响应cycle是重复发送信号并从dbc文件中提取信号的次数。延迟函数是Qtimer的一部分。我已经更新了postTry以调试应用程序,并查看其失败的位置。但是,计算仍然保持不变。假设您的周期为10,队列大小为10,即550秒,这几乎是10分钟……实际上,signal从未失败。它运行良好。问题是,当我想发送另一个信号时,它进入队列,等待前一个信号完成周期数,然后处理新信号。我想在不停止另一个信号的情况下,同时发送新信号,同时获得信号输出。这是吗可能吗?不,您不能在一条CAN总线上同时发送多个信号。但是,您可以更改发送行为。在尝试下一条消息之前,不要尝试发送单个信号循环次数,而是通过将循环信息添加到消息中推回消息。。。