================ idThread::Execute ================ */
| 647 | ================ |
| 648 | */ |
| 649 | bool idThread::Execute( void ) { |
| 650 | idThread *oldThread; |
| 651 | bool done; |
| 652 | |
| 653 | if ( manualControl && ( waitingUntil > gameLocal.time ) ) { |
| 654 | return false; |
| 655 | } |
| 656 | |
| 657 | oldThread = currentThread; |
| 658 | currentThread = this; |
| 659 | |
| 660 | lastExecuteTime = gameLocal.time; |
| 661 | ClearWaitFor(); |
| 662 | done = interpreter.Execute(); |
| 663 | if ( done ) { |
| 664 | End(); |
| 665 | if ( interpreter.terminateOnExit ) { |
| 666 | PostEventMS( &EV_Remove, 0 ); |
| 667 | } |
| 668 | } else if ( !manualControl ) { |
| 669 | if ( waitingUntil > lastExecuteTime ) { |
| 670 | PostEventMS( &EV_Thread_Execute, waitingUntil - lastExecuteTime ); |
| 671 | } else if ( interpreter.MultiFrameEventInProgress() ) { |
| 672 | PostEventMS( &EV_Thread_Execute, gameLocal.msec ); |
| 673 | } |
| 674 | } |
| 675 | |
| 676 | currentThread = oldThread; |
| 677 | |
| 678 | return done; |
| 679 | } |
| 680 | |
| 681 | /* |
| 682 | ================ |
no test coverage detected