我使用此代码将失效锁定时间设置为100毫秒:
QLockFile lock1(fn);
lock1.setStaleLockTime(100);
QVERIFY(lock1.lock());
QLockFile lock2(fn);
lock2.setStaleLockTime(100);
QVERIFY(lock2.lock());
我预计它会阻止只有100毫秒,但它会无限期地阻塞。那是为什么?
我误解了锁文件应该如何变得陈旧?这是what the docs say:
staleLockTime的值由lock()和tryLock()使用,以确定何时将现有锁定文件视为过时,即由崩溃的进程遗留。这对于PID同时被重用的情况很有用,因此检测过时锁定文件的一种方法是它已经存在了很长时间。
答案 0 :(得分:1)
你误解了一些事情
如果持有锁的进程崩溃,则锁文件将保留在磁盘上 并且可以阻止任何其他进程访问共享资源, 永远。出于这个原因,QLockFile尝试检测这种“陈旧”锁定 文件,基于写入文件的进程ID。覆盖 同时进程ID被重用的情况,当前 进程名称与对应的进程名称进行比较 来自锁文件的进程ID。如果进程名称不同,则 锁定文件被认为是陈旧的。另外,最后一次修改 锁定文件的时间(默认为30秒,对于a的用例) 短期操作)被考虑在内。如果锁定文件是 发现是陈旧的,它将被删除。
因此,不仅staleLockTime
而且还检查了进程ID和其他内容。所以你不能这样使用这种方法。