请从 QT C++ 的角度描述“可能的 I/O”SIGIO 错误通常表示什么。我知道 I/O 代表输入/输出,但这就是我所知道的。我发现的唯一体面的信息是:http ://davmac.org/davpage/linux/async-io.html但它太通用了,无法帮助我解决我的问题。
我不一定需要一个答案来确切地告诉我我做错了什么(如下),但希望获得关于哪些活动通常会导致此错误以及它表明您做错了什么的更详细的答案。
剩下的部分会给你一个关于我正在做的活动的想法,但你的答案需要完全针对这个部分(我的代码),并且可以只描述错误指示的内容以及与之相关的任何特定 QT 信息
我有时在第一次循环时收到此错误,有时在 5 次左右循环后收到此错误。它使gui崩溃。这发生在 linux 上的 qt 4.8 中。下面是一段类似的代码,它发生在我的主 gui 的 QThread 上。
Test.h
QBuffer *qbuff;
QByteArray qbyte;
Test.cpp
void Test::callExample()
{
for (int i=0;i<10;i++)
{
wait(1);
example();
}
}
void Test::example()
{
QFile inFile("/public/sounds/test.wav");
inFile.open(QIODevice::ReadOnly);
QByteArray qbyte = inFile.readAll();
inFile.close();
qbuff=new QBuffer();
qbuff->setData(qbyte);
qbuff->open(QIODevice::ReadOnly);
qbuff->seek(0);
audioOutput->start(qbuff);
}
在我的完整代码中,在 example() 中,我还有一个事件循环,完成后,删除的 qbuff 和 audioOutput。该错误似乎来自不同的代码位置,最常见的是在事件从事件循环更改为 idleState 之后,但实际问题应该源于所示代码。我还尝试将 callExample() 中的循环移动到我的事件循环内部,甚至从我的主线程(因此每次调用创建一个新线程),但我仍然遇到问题。如果没有循环并且该函数仅被调用一次,或者如果代码发生在我的主 gui 而不是 qthread 中,我似乎没有收到错误。