QByteArray到'比特流'输出

时间:2015-03-27 17:17:38

标签: c++ qt4 pthreads qbytearray

我遇到以下代码问题。我试图通过两个线程之间的共享bool值(数据)传输QByteArray,这两个线程写入和读取数据,通过'syncs'和'ack'bools进行通信[通过线路模拟通信协议]。不幸的是,当我尝试将输出QByteArray转换为bool输出时,我得到一个'ASSERT:'错误。以下是相关代码和输出。

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和位之间转换的其他代码源,据我所知,语法是正确的。

感谢您的帮助。

0 个答案:

没有答案