qt翻译--QWaitCondition

QWaitCondition Class Reference
[QtCore module]

该类提供一个情况变量来同步线程。
#include <QWaitCondition>
注意:该类所有的函数是线程安全的。
公共函数:

QWaitCondition
  ()
 
~QWaitCondition   ()
bool
wait   ( QMutex *   mutex , unsigned long   time   = ULONG_MAX )
bool
wait   ( QReadWriteLock *   readWriteLock , unsigned long   time   = ULONG_MAX )
void
wakeAll   ()
void
wakeOne   ()
详细描述:
该类允许一个线程来告诉其他线程一些种情况已经被遇到。一个或者多个线程能阻塞等待为一个 QWaitCondition 来设置一个情况用 wakeOne() wakeAll() 。使用 wakeOne ()来随机唤醒一个被选择的情况或者 wakeAll ()来唤醒所有的。
例如,假定我们有三个任务,应该被执行,当使用者按下一个键。每个任务能被放入一个线程。每个都有一个 run 像这样:
forever {
      
     mutex.lock();
      
     keyPressed.wait(&mutex);
      
     do_something();
      
     mutex.unlock();
      
 }
      
这里 keyPressed变量是一个全局的 QWaitCondition
第四个线程将读键按下 和唤醒其他的三个线程,
forever {
      
     getchar();
      
     keyPressed.wakeAll();
      
 }
      
三个线程按顺序被唤醒时没有定义的。如果一些线程仍然在 do_sth() 当键被按下,他们将不被唤醒。所以任务将并不被执行。这种情况能被解决,通过使用一个 counter 和一个 QMutex 来保护她。例如:
forever {
      
     mutex.lock();
      
     keyPressed.wait(&mutex);
      
     ++count;
      
     mutex.unlock();
      

    
      
    
     do_something();
      

    
      
    
     mutex.lock();
      
     --count;
      
     mutex.unlock();
      
 }
      
下面是代码为第四个线程
forever {
      
     getchar();
      

    
      
    
     mutex.lock();
      
     // Sleep until there are no busy worker threads
      
     while (count > 0) {
      
         mutex.unlock();
      
         sleep(1);
      
         mutex.lock();
      
     }
      
     keyPressed.wakeAll();
      
     mutex.unlock();
      
 }
      
Mutex 是必须的,因为两个线程的结果视图改变相同的变量的值。
等待情况是一个强大的原始线程同步。等待情况例子展示怎样使用 QWaitCondition 作为一个替代 QSemaphore 来控制进入一个循环 buf 被一个生产者线程和消费者线程。
成员函数文件

QWaitCondition::QWaitCondition ()

QWaitCondition::~QWaitCondition ()

bool QWaitCondition::wait ( QMutex * mutex, unsigned long time = ULONG_MAX )

释放锁定的 mutex 和等待 waitCondition Mutex 必须被调用的线程原始锁定。如果 mutex 不是在一个锁定的状态,这个函数立即返回。如果 mutex 是一个递归的 mutex ,这个函数立即返回。 Mutex 将被解锁,调用线程将阻塞直到这些情况被遇到:
1.     另一个线程用 wakeOne ()或者 wakeAll ()发射信号。这个函数将返回 true
2.     time 超时。如果 time ulong_max (默认的),然后等待将绝不超时。这个函数将返回 false ,如果等待超时

bool QWaitCondition::wait ( QReadWriteLock * readWriteLock, unsigned long time = ULONG_MAX )

void QWaitCondition::wakeAll ()

唤醒所有在等待 waitCondition 的线程。唤醒的顺序依赖于操作系统的政策,不能被控制。

void QWaitCondition::wakeOne ()

唤醒一个线程,等待 waitCondition 的。线程的唤醒取决于操作系统的政策,不能被控制。
如果你想唤醒一个特别的线程,解决办法是使用不同的等待情况。

你可能感兴趣的:(职场,qt,休闲)