- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 C++ Qt 程序,它使用 QThread 和使用 QMutex 和 QWaitCondition 实现的暂停/恢复机制。这就是它的样子:
MyThread.h:
class MyThread : public QThread
{
Q_OBJECT
public:
MyThread();
void pauseThread();
void resumeThread();
private:
void run();
QMutex syncMutex;
QWaitCondition pauseCond;
bool pause = false;
}
MyThread.cpp:
void MyThread::pauseThread()
{
syncMutex.lock();
pause = true;
syncMutex.unlock();
}
void MyThread::resumeThread()
{
syncMutex.lock();
pause = false;
syncMutex.unlock();
pauseCond.wakeAll();
}
void MyThread::run()
{
for ( int x = 0; x < 1000; ++x )
{
syncMutex.lock();
if ( pause == true )
{
pauseCond.wait ( &syncMutex );
}
syncMutex.unlock();
//do some work
}
}
我使用 MyThread 类的 vector :
void MyClass::createThreads()
{
for ( int x = 0; x < 2; ++x)
{
MyThread *thread = new MyThread();
thread->start();
//"std::vector<MyThread *> threadsVector" is defined in header file
this->threadsVector.push_back ( thread );
}
}
void MyClass::pause()
{
for ( uint x = 0; x < sizeof ( this->threadsVector ); ++x )
{
this->threadsVector[x]->pauseThread();
}
}
void MyClass::resume()
{
for ( uint x = 0; x < sizeof ( this->threadsVector ); ++x )
{
this->threadsVector[x]->resumeThread();
}
}
当我调用 MyClass
的 pause()
方法时,我得到 Segmentation fault signal pointing (in Debug mode) to line 3 in MyThread.cpp - syncMutex .lock();
。它不依赖于 MyThread
实例的数量 - 它甚至在 std::vector 中有 1 个线程。
我很确定我错过了一些重要的东西,但我不知道是什么。我做错了什么?
(如果重要的话,我使用带有 Qt 5 的 MinGW 4.7 编译器)
最佳答案
在 for 循环中,使用 this->threadsVector.size()
而不是 sizeof(this->threadsVector)
来找出向量包含多少项。
关于c++ - QMutex 与 QThread - 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16612662/
我有一个属于某个类的函数,在这个函数中,函数开头有一个 mutex.lock,返回前有一个 mutex.unlock。现在遇到了mutex卡在locked状态的情况。如果此功能是我使用该互斥锁锁定和解
给定以下代码: #include #include #include #include #include #include #include #include #include #i
假设有如下QT代码(QT 5.3.1): void SenderClass::runSignal() { emit mySignal(); } void ReceiverClass::Rece
从不同的线程写入共享变量,我计划使用 QMutex,如果我将互斥变量声明为外部变量,我可以使用它在来自不同源文件的单独两个函数中进行读写吗? 喜欢 header.hpp extern QMutex m
我通过通常受相应互斥锁保护的公共(public)可访问成员变量来命令我的线程。 我的问题是:如果单个变量在写访问期间受互斥量保护它是否也应该在读取访问期间受到保护,还是我可以简单地读取它? 示例: 一
我正在尝试使用递归 QMutex,我阅读了 QMutex 类引用,但我不明白如何去做,有人可以给我一个例子吗?我需要一些方法来锁定可以在调用锁定方法之后或之前解锁的 QMutex。如果递归互斥不是这种
我是 Qt 的新手,我正在寻找 Qt 中的多线程。 正如我在 Qt Documents 中了解到的那样,我为两个线程定义了两个类: #include #include class thread_a
我只想实现如下代码。 QString Class1::getNonce() { //if some thread is getting nonce wait here until it fin
我已经包含了 QMutex header 并使用它,如下所示。但是我收到以下错误: error C2146: syntax error : missing > ';' before identifie
你好,我在用 qmutex 掌握 qthread 时遇到了问题——通常如何使用它——学习它我正在尝试创建限制为 8,000,000 的质数搜索器,但即使我使用给定的代码作为基础,我也失败了对于类似的例
从多个线程调用以下追加函数。我不希望数据重新写入追加,因为计数器尚未递增。 这会暂停所有进入的线程,除了当前使用 Append 的线程吗?或者其他线程会继续运行而不附加数据吗? 互斥量是否需要是“ST
我发现即使是对 QMutex 的简单等待也会导致断言。我可能做错了什么? QMutex mutex; SyncMgr::SyncMgr(QObject *parent) : QObject(paren
有没有人知道如何在不使用函数的情况下检查 QMutex 是否被锁定: bool QMutex::tryLock() 我不想使用 tryLock() 的原因是因为它做了两件事: 检查互斥锁是否被锁定。
在 Qt 文档中关于 QMutex据说: (...) When you call lock() in a thread, other threads that try to call lock() i
我有一个非常简单的情况:我在一个线程中有一个高速数据生成器,该线程生成其中包含[可变长度]元素的缓冲区。一旦缓冲区被填满,我就拥有一个将其写入磁盘的使用者。 现在,如果尚未由使用者线程写入缓冲区,则需
我有一个 C++ Qt 程序,它使用 QThread 和使用 QMutex 和 QWaitCondition 实现的暂停/恢复机制。这就是它的样子: MyThread.h: class MyThrea
我正在尝试向我的 Qt 应用程序添加多个线程,但是当它执行这个线程时,程序就崩溃了,我得到了一个错误 QThread: Destroyed while thread is still running
我想知道关于 Mutex 的哪种用法更好。我想到的两种用法是: 1) Qlist getList() { QMutexLocker locker(&m_mutex);
我有 QMutex m_mutex; 作为我类(class)中的私有(private)字段,我尝试使用其中一种方法中的 QMutexLocker 锁定它,但是当我尝试构建它时,我得到 C2530 错误
我正在GDB中运行我的程序。我的程序需要为其工作创建16个线程。所有这些都很好。最后我得到了错误QMutex::lock: Deadlock detected in thread 0xfe8这是GDB
我是一名优秀的程序员,十分优秀!