1

次のコードに問題があります。「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 とビットの間の変換について他のコード ソースを確認しましたが、構文は私が知る限り正しいものです。

ご協力いただきありがとうございます。

4

0 に答える 0