1

我对以下代码有疑问。我正在尝试通过写入和读取数据的两个线程之间的共享布尔值(数据)传输 QByteArray,通过“同步”和“确认”布尔值进行通信 [通过电线模拟通信协议]。不幸的是,当我尝试将输出 QByteArray 转换为 bool 输出时,我得到一个“断言:”错误。以下是相关代码和输出。

void* write(void* wind)
{
// Initialization
int i,b;
Window *w = (Window *)wind;

qDebug() << "Write thread started.";

// Write Loop
while(!w->exit)
{
    if(w->enqueue == true)
    {
        // Reset Trigger
        w->enqueue = false;
        QByteArray cachedByteArray(w->byteArrayOut);

        // Convert from QByteArray to QBitArray
        qDebug() << "Starting bit stream" << endl;
        for(i=0; i<(cachedByteArray.count()); ++i)
        {
            qDebug() << "Byte: " << i << endl;
            for(b=0; b<8; ++b)
            {
                qDebug() << "Bit: " << b << endl;
                data = cachedByteArray.at(i)&(1<<b);
                qDebug() << "Sent Bit: " << b << endl;
                syncs = true;
                while(!ack); // Wait for bit to be read
                syncs = false;
                while(ack); // Wait for read thread to be ready
            }
        }
    }
}

控制台输出:

Write thread started. 

Starting bit stream 

Byte:  0 

Bit:  0 

Sent Bit:  0 

Bit:  1 

ASSERT: "i >= 0 && i < size()" in file /usr/include/qt4/QtCore/qbytearray.h, line 414
The program has unexpectedly finished.

从调试消息中可以看出,循环适用于第一次迭代,但在第二位的输出上崩溃。我已经检查了 QByteArray 和位之间转换的其他代码源,据我所知语法是正确的。

谢谢你的帮助。

4

0 回答 0