我试图使用QFileSystemWatcher查看日志文件,但每次修改日志文件时,fileChanged信号都不会始终发出。是否知道QFileSystemWatcher如何确定文件是否被修改(在windows上)?
发布于 2016-10-27 13:42:25
QFileSystemWatcher'的性能完全取决于底层平台提供了什么。通常情况下,如果一个进程正在写入文件,则其他一些进程将立即看到这些更改,这是绝对不能保证的。QFileSystemWatcher的行为可能会告诉你这个事实。日志写入过程可能会选择刷新文件。根据平台的不同,刷新的语义可能是这样的,当flush()返回时,其他进程可以看到在flush()之前对文件所做的更改。如果是这样的话,那么您将期望QFileSystemWatcher将更改通知您。
随着平台获得新的特性,QFileSystemWatcher在实现新的文件系统通知API方面可能会滞后。您需要阅读它的源代码,以确定它是否支持您所选择的平台在这方面提供的所有内容。
您需要限定QFileSystemWatcher在您想要支持的每个平台上的行为。您可能会发现,定期显式轮询文件信息在某些情况下可能会更好地工作--同样,轮询和QFileSystemWatcher之间的选择应该在逐个平台的基础上进行,因为如果观察者在给定的平台上正常工作,那么轮询可能会产生不必要的开销。
https://stackoverflow.com/questions/40284573
复制相似问题