equal
deleted
inserted
replaced
171 /* |
171 /* |
172 QThreadPrivate |
172 QThreadPrivate |
173 */ |
173 */ |
174 |
174 |
175 QThreadPrivate::QThreadPrivate(QThreadData *d) |
175 QThreadPrivate::QThreadPrivate(QThreadData *d) |
176 : QObjectPrivate(), running(false), finished(false), terminated(false), |
176 : QObjectPrivate(), running(false), finished(false), terminated(false), exited(false), returnCode(-1), |
177 stackSize(0), priority(QThread::InheritPriority), data(d) |
177 stackSize(0), priority(QThread::InheritPriority), data(d) |
178 { |
178 { |
179 #if defined (Q_OS_UNIX) |
179 #if defined (Q_OS_UNIX) |
180 thread_id = 0; |
180 thread_id = 0; |
181 #elif defined (Q_WS_WIN) |
181 #elif defined (Q_WS_WIN) |
480 int QThread::exec() |
480 int QThread::exec() |
481 { |
481 { |
482 Q_D(QThread); |
482 Q_D(QThread); |
483 QMutexLocker locker(&d->mutex); |
483 QMutexLocker locker(&d->mutex); |
484 d->data->quitNow = false; |
484 d->data->quitNow = false; |
|
485 if (d->exited) |
|
486 return d->returnCode; |
|
487 locker.unlock(); |
|
488 |
485 QEventLoop eventLoop; |
489 QEventLoop eventLoop; |
486 locker.unlock(); |
|
487 int returnCode = eventLoop.exec(); |
490 int returnCode = eventLoop.exec(); |
|
491 |
|
492 locker.relock(); |
|
493 d->exited = false; |
|
494 d->returnCode = -1; |
488 return returnCode; |
495 return returnCode; |
489 } |
496 } |
490 |
497 |
491 /*! |
498 /*! |
492 Tells the thread's event loop to exit with a return code. |
499 Tells the thread's event loop to exit with a return code. |
509 */ |
516 */ |
510 void QThread::exit(int returnCode) |
517 void QThread::exit(int returnCode) |
511 { |
518 { |
512 Q_D(QThread); |
519 Q_D(QThread); |
513 QMutexLocker locker(&d->mutex); |
520 QMutexLocker locker(&d->mutex); |
|
521 d->exited = true; |
|
522 d->returnCode = returnCode; |
514 d->data->quitNow = true; |
523 d->data->quitNow = true; |
515 for (int i = 0; i < d->data->eventLoops.size(); ++i) { |
524 for (int i = 0; i < d->data->eventLoops.size(); ++i) { |
516 QEventLoop *eventLoop = d->data->eventLoops.at(i); |
525 QEventLoop *eventLoop = d->data->eventLoops.at(i); |
517 eventLoop->exit(returnCode); |
526 eventLoop->exit(returnCode); |
518 } |
527 } |
615 */ |
624 */ |
616 QThread::Priority QThread::priority() const |
625 QThread::Priority QThread::priority() const |
617 { |
626 { |
618 Q_D(const QThread); |
627 Q_D(const QThread); |
619 QMutexLocker locker(&d->mutex); |
628 QMutexLocker locker(&d->mutex); |
620 return d->priority; |
629 |
|
630 // mask off the high bits that are used for flags |
|
631 return Priority(d->priority & 0xffff); |
621 } |
632 } |
622 |
633 |
623 /*! |
634 /*! |
624 \fn void QThread::sleep(unsigned long secs) |
635 \fn void QThread::sleep(unsigned long secs) |
625 |
636 |