2010-09-10 76 views
2

我有一个守护进程(obexpushd),它将一些文件写入目录。在我的Qt应用程序中,我使用QFileSystemWatcher监听此目录中的更改。但是,当obexpushd创建文件时,会发出directoryChanged信号,而不是完成写入时。Qt:等待文件被另一个进程关闭

所以,我必须等待obexpush在处理之前完成写入文件。什么是最好的策略?

检查大小在固定的时间内保持不变吗? 以固定的时间间隔调用lsof? 任何更好的解决方案?

回答

2

obexpushd是一个你可以改变的程序吗?如果是这样,最简单的做法可能是将obexpushd写入临时文件,然后在完成写入时重命名文件。这将是你可以在你的Qt程序中监控的东西。更强大和更优雅的方法是让obexpush与Qt程序进行通信,也许通过dbus来明确说明何时完成。

如果obexpushd不受您的控制,那么您列出的策略之一可能是您最好的选择。

+0

修改Obexpushd似乎是一个很好的解决方案,但不幸的是它不易维护(在嵌入式环境中甚至更少!)。 – Tangui 2010-09-10 06:34:34

+0

反正我会试试这个解决方案。 – Tangui 2010-09-10 06:34:51

0

您可以观察文件时间戳以进行更改。 QFileInfo使这成为可能。

0

在这个问题上似乎有一个开放的bug http://bugreports.qt-project.org/browse/QTBUG-3576。如果你知道你正在等待的文件的文件名,也许你可以使用QFileSystemWatcher::fileChanged()

+0

是的,但obex服务器正在接收并保存文件时,文件会不断修改。没有办法知道什么事件触发了这个信号。 – Tangui 2010-09-10 06:32:35

相关问题