gpt4 book ai didi

c++ - QProcess,无法创建管道

转载 作者:太空宇宙 更新时间:2023-11-04 09:03:16 40 4
gpt4 key购买 nike

我正在以 1 Hz 的频率在定时器槽中运行 QProcess。该过程旨在调用 Linux 命令并解析其输出。

问题是这样的:程序运行了大约20分钟后,出现了这个错误:

QProcessPrivate::createPipe: Cannot create pipe 0x104c0a8: Too many open files
QSocketNotifier: Invalid socket specified

理想情况下,该程序会在系统的整个正常运行时间内运行,可能是几天或几周。

我想我通过阅读示例对过程控制非常小心,但也许我错过了一些东西。我使用了 Qt 网站上的示例,它们使用的代码与我编写的代码相同,但这些代码是为单次使用而设计的,而不是数千次。这是一个最小的例子:

class UsageStatistics : public QObject {
Q_OBJECT
public:
UsageStatistics() : process(new QProcess) {
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(getMemoryUsage()));
timer->start(1000); // one second
}

virtual ~UsageStatistics() {}

public slots:

void getMemoryUsage() {
process->start("/usr/bin/free");
if (!process->waitForFinished()) {
// error processing
}

QByteArray result = process->realAll();
// parse result

// edit, I added these
process->closeReadChannel(QProcess::StandardOutput);
process->closeReadChannel(QProcess::StandardError);
process->closeWriteChannel();
process->close();
}
}

我也试过在函数末尾手动删除进程指针,然后在开头新建。我想这值得一试。

为回答此问题的人提供免费啤酒 :)

最佳答案

QProcess 派生自 QIODevice,所以我会说调用 close()应该关闭文件句柄并解决您的问题。

关于c++ - QProcess,无法创建管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16237117/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com