我遇到以下代码问题。我试图通过两个线程之间的共享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和位之间转换的其他代码源,据我所知,语法是正确的。
感谢您的帮助。