Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用QLockFile::setStaleLockTime()但锁不';不要变得陈腐?_C++_Qt_Locking - Fatal编程技术网

C++ 使用QLockFile::setStaleLockTime()但锁不';不要变得陈腐?

C++ 使用QLockFile::setStaleLockTime()但锁不';不要变得陈腐?,c++,qt,locking,C++,Qt,Locking,我正在使用以下代码将过时锁定时间设置为100毫秒: QLockFile lock1(fn); lock1.setStaleLockTime(100); QVERIFY(lock1.lock()); QLockFile lock2(fn); lock2.setStaleLockTime(100); QVERIFY(lock2.lock()); 我以为它只会阻塞100毫秒,但它会无限期地阻塞。为什么呢 我是否误解了锁文件应该如何过时?这是: lock()和tryLock()使用staleLock

我正在使用以下代码将过时锁定时间设置为100毫秒:

QLockFile lock1(fn);
lock1.setStaleLockTime(100);
QVERIFY(lock1.lock());

QLockFile lock2(fn);
lock2.setStaleLockTime(100);
QVERIFY(lock2.lock());
我以为它只会阻塞100毫秒,但它会无限期地阻塞。为什么呢

我是否误解了锁文件应该如何过时?这是:

lock()和tryLock()使用staleLockTime的值来确定现有锁文件何时被视为过时,即崩溃进程遗留下来的文件。这对于同时重用PID的情况非常有用,因此检测陈旧锁文件的一种方法是,它已经存在很长时间了


你误解了什么

如果持有锁的进程崩溃,锁文件将保留在磁盘上 并且可以阻止任何其他进程访问共享资源, 曾经因此,QLockFile会尝试检测这样一个“过时”的锁 文件,基于写入文件的进程ID。掩护 在进程ID被重用的情况下,当前 进程名称与对应进程的名称进行比较 从锁文件中删除进程ID。如果进程名称不同,则 锁定文件被认为是过时的。此外,最后的修改 锁定文件的时间(默认情况下,对于 考虑了短寿命运行)。如果锁定文件是 如果发现已过时,将删除它


因此,不仅要检查
staleLockTime
,还要检查进程ID和其他事项。因此,您不能以这种方式使用此方法。

但我认为,由于PID重用,PID只能用于证明文件过时,而无需等待。仅通过PID无法证明文件是否过时(它可能已被重用)。所以它看起来像一只虫子。创建错误报告。