unsigned char buf[10]
ワーカー関数から GUI スレッド (メイン スレッド) に配列を送信するにはどうすればよいですか。
GUIスレッドで処理する関数のパラメーターにスロットのbufがあるシグナル/スロットメカニズムを作成しようとしていました。
アップデート:
これは私がこれまでに持っているものです:
ワーカークラス:
class Worker : public QObject
{
Q_OBJECT
public:
Worker(FILE *datafile, int sockint, int bitsint);
~Worker();
int channels_buf[10];
FILE *data;
int sock;
int bits;
public slots:
void doWork();
signals:
void finished();
void newinfo(unsigned char buf[10]);
private:
};
ワーカーコンストラクター
// Worker thread
Worker::Worker(FILE *datafile, int sockint, int bitsint)
:data(datafile)
,sock(sockint)
,bits(bitsint)
{
}
Worker::~Worker()
{
}
スレッドの機能
// Worker functions
void Worker::doWork()
{
unsigned char buf[10];
unsigned char crcval;
memset (buf, 0, 10);
while(1)
{
int i;
int numb;
numb = 0;
numb = recv (sock, buf, 10, MSG_WAITALL);
crcval = BP_CRC8 (buf, 9);
// 8 bits
if (bits == 0)
{
if (crcval == buf[9])
{
emit newinfo(buf);
}
}
}
emit finished();
}
それから私はスレッドを開始します
Worker *worker;
QThread *workerThread;
worker = new Worker(data, sock, bits);
workerThread = new QThread(this);
connect(workerThread, SIGNAL(started()), worker, SLOT(doWork()));
connect(workerThread, SIGNAL(finished()), worker, SLOT(deleteLater()));
connect(worker, SIGNAL(newinfo(unsigned char[])), this, SLOT(process_new_info(unsigned char[])));
worker->moveToThread(workerThread);
workerThread->start();
これはunsigned char buf[10]
、ワーカーからの を処理することになっている gui スレッドの関数です。
void gui::process_new_info(unsigned char buf[10])
{
int v = 0;
printf ("%d ->", buf[0]);
fprintf (data, "%d,", buf[0]);
for (int i = 1; i < 9; i++)
{
v = buf[i];
printf ("%d,", v);
fprintf (data, "%d,", v);
}
printf ("\n");
fprintf (data, "\n");
}