问题标签 [qmutex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3476 浏览

multithreading - QMutex 卡在锁定状态

我有一个函数,它是一个类的一部分,在这个函数中,在函数的开头有一个 mutex.lock,在它返回之前有一个 mutex.unlock。现在遇到了互斥锁卡在锁定状态的情况。如果此功能是我使用该互斥锁进行锁定和解锁的唯一地方,那么可能会执行此操作。该函数是从主线程和其他 1 或 2 个 QThread 调用的。

更新:问题是由于线程没有在函数调用之间休眠。也许缺乏睡眠真的很快重新锁定了互斥锁?您也可以调用 yieldCurrentThread();

0 投票
2 回答
1787 浏览

c++ - 在 Qt 中,如何查询 QMutex 或 QReadWriteLock 的状态?

我在我的应用程序中使用QReadWriteLock来保护对资源对象的访问。

我尽可能使用 QReadLocks 和 QWriteLocks,但有时我需要一个跨越函数边界的“长寿命”锁。所以有时我需要能够查询 QReadWriteLock(或 QMutex,在这种情况下也是如此)的状态,因为解锁已经解锁的互斥锁非常糟糕。

对于 QMutex:

解锁未锁定的互斥锁会导致未定义的行为。

对于 QReadWriteLock:

尝试解锁未锁定的锁是错误的,将导致程序终止。

能够查询互斥锁的状态也非常方便调试断言在开始某些操作之前测试,我确实拥有那个“长寿命”锁。

但我真正想要的只是如果我有锁就能够解锁互斥锁,如果我没有锁就不能解锁它。那会让我很开心。IMO 该unlock()功能应该已经为我执行此操作,但事实并非如此。

有什么办法吗?

(不,Recursive在这种情况下使用模式没有帮助)

0 投票
7 回答
30816 浏览

c++ - Qt:单实例应用保护的最佳实践

QSingleApplication? QMutex? QSharedMemory? 我正在寻找可以在 Windows、OSX 和 Linux (Ubuntu) 中顺利运行的东西。使用 Qt 4.7.1

0 投票
3 回答
44752 浏览

c++ - 如何使用 QMutex?

我是 Qt 的新手,我正在寻找 Qt 中的多线程。
正如我在Qt Documents中了解到的,我为两个线程定义了两个类:

在 CPP 文件中:

第二个线程类是相同的,但使用counter--方法run()
然后我从main.ccp.

现在我的问题是:我
如何分享counter和使用?thread_athread_bQMutex

0 投票
0 回答
259 浏览

qt - 为什么在此代码中使用 QMutex?

我正在阅读别人的代码,我遇到了这段代码,它是多线程应用程序的一部分。这段代码是从QThreadrun()继承的类中函数的一部分。 我认为QMutex用于保护变量不被多个线程同时更改。但这里是班级的成员。因此它将为类的每个实例创建。 我对互斥锁错了吗?程序员是否编写了错误的代码:)?或者这里互斥量有另一个应用程序?
stopped

这是 stop 的声明:

0 投票
0 回答
238 浏览

qt - 'class QMutex' 没有名为 'EnterCriticalSection' 的成员

我正在使用 QT 4.8,每当我对 QMutex 进行简单使用时,都会出现以下编译错误:'class QMutex' has no member named 'EnterCriticalSection'

样本:

mutex 被定义为类中的成员并在标头中初始化。

0 投票
1 回答
2063 浏览

c++ - QMutex 与 QThread - 分段错误

我有一个 C++ Qt 程序,它使用 QThread 和使用 QMutex 和 QWaitCondition 实现的暂停/恢复机制。这就是它的外观:

我的线程.h:

我的线程.cpp:

我使用 MyThread 类的向量:

当我调用pause()的方法时MyClass,我得到分段错误信号(在调试模式下)指向 MyThread.cpp - 中的第 3 行syncMutex.lock();。它不依赖于MyThread实例的数量 - 它甚至可以在 std::vector 中使用 1 个线程。

我很确定我错过了一些重要的事情,但我不知道是什么。我究竟做错了什么?

(如果它确实重要,我使用带有 Qt 5 的 MinGW 4.7 编译器)

0 投票
5 回答
3958 浏览

c++ - QMutex 是否需要是静态的,以便此类实例的其他线程调用知道暂停其操作?

从多个线程调用以下附加函数。我不希望数据重写追加,因为计数器尚未增加。

除了当前使用 Append 的线程之外,这是否会暂停所有进入的线程?或者其他线程会继续运行而不附加数据吗?

互斥体是否需要“静态”或每个实例都知道暂停操作?

如果我不想打嗝,我假设我必须建立一个缓冲区来备份日志数据?

0 投票
3 回答
1001 浏览

multithreading - 在 start() 调用线程仍在运行时的 QThread 状态,但之后已经不是

我有一个 GUI 线程,我在其中调用write(QString text)另一个MyQThread.
MyQthread包含QMutex mutexQList<QString> list。以下是 的write()run()方法MyQThread

例如,我们在“A 点”。在此之后,我们正在检查列表,它是空的,所以我们要去“点 B”。此时write()调用,互斥锁仍处于锁定状态,因此 GUI 线程在“点 C”之前等待。
现在我们在“点 B”,在这个 GUI 线程被解锁并调用 start()(“点 D”)之后。
有没有可能,在'点 D' MyQThread 仍在运行?
在这种情况下,调用start()什么都不做。并且在下一次调用之前list不会处理新添加的项目。 附加信息。就我而言,这里只有一个 MyQThread 实例。run()write()

0 投票
2 回答
607 浏览

synchronization - 如果 QMutex 很少,则等待第一个解锁的 QMutex

我有两个 QMutex 对象,我需要将它们都锁定,erase()方法。但顺序并不重要。
所以,现在我正在等待一个 QMutex 处于解锁 ( QMutexLocker locker(&listMutex)) 状态,而不是等待另一个 ( QMutexLocker locker(&writeMutex))。
但是等待第一个解锁的互斥锁会更有效。而不是等待另一个。比等待时间会更短。
如何实施这种行为?
我是否应该创建额外的递归 QMutex 或 QSemaphore 并将两个 QMutex 的状态与这个新对象同步,而不是等待我的 QMutex 而是等待这个新对象。
这应该可行,但也许有一种更简单的方法而不复制 QMutex 对象?