次のコードに問題があります。「syncs」および「ack」ブールを介して通信し、データを読み書きする2つのスレッド間で共有ブール値(データ)を介してQByteArrayを送信しようとしています[ワイヤを介した通信プロトコルのエミュレート]。残念ながら、出力 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.
デバッグ メッセージからわかるように、ループは最初の反復では機能しますが、2 番目のビットの出力でクラッシュします。QByteArray とビットの間の変換について他のコード ソースを確認しましたが、構文は私が知る限り正しいものです。
ご協力いただきありがとうございます。