• 5498阅读
  • 3回复

[线程]如何阻塞线程 [复制链接]

上一主题 下一主题
离线whenever
 

只看楼主 正序阅读 楼主  发表于: 2008-07-17
— 本帖被 XChinux 执行加亮操作(2008-07-17) —
想要在某种条件下,阻塞线程一定时间,比如100ms。但是wait(int ms)在被自己调用时,只是返回不能实际生效,进入到L02和L03;如果在GUI线程中调用,在L10处,阻塞,但是被阻塞线程仍然不停循环执行。
不知道那位有过类似经验,给指定一下!谢谢
以下为wait()的代码
  。。。。。。。
  Q_D(QThread);
    QMutexLocker locker(&d->mutex);

  01  if (d->id == GetCurrentThreadId()) {
  02      qWarning("QThread::wait: Thread tried to wait on itself");
  03      return false;
  04  }
  05  if (d->finished || !d->running)
  06      return true;

  07  ++d->waiters;
  08  locker.mutex()->unlock();

  09  bool ret = false;
  10  switch (WaitForSingleObject(d->handle, time)) {
  11  case WAIT_OBJECT_0:
  12  ret = true;
  13      break;
  14  case WAIT_FAILED:
  15      qErrnoWarning("QThread::wait: Thread wait failure");
  16      break;
  17  case WAIT_ABANDONED:
  18  case WAIT_TIMEOUT:
  19  default:
  20      break;
  21  }

  22  locker.mutex()->lock();
  23  --d->waiters;
    。。。。。。。
离线whenever

只看该作者 3楼 发表于: 2008-07-26
用msleep()/sleep就可以啦:)
离线lzian
只看该作者 2楼 发表于: 2008-07-18
wait()的作用是等待线程结束,用于安全结束一个线程。
想要阻塞的话就sleep()一下。
离线weizhy
只看该作者 1楼 发表于: 2008-07-17
你所谓的线程阻塞,目的是什么呢?
快速回复
限100 字节
 
上一个 下一个