From e5c96c2732289cb70ca9094007ab21e5439dea9c Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Sun, 4 Dec 2022 02:09:30 +0800 Subject: [PATCH] up --- src/pocketpy.h | 7 +++---- src/vm.h | 11 ++++++++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/pocketpy.h b/src/pocketpy.h index 40897892..555b33de 100644 --- a/src/pocketpy.h +++ b/src/pocketpy.h @@ -840,10 +840,9 @@ extern "C" { } __EXPORT - /// Emit a KeyboardInterrupt signal in order to stop a running threaded virtual machine. - void pkpy_tvm_keyboard_interrupt(VM* vm){ - // although this is a method of VM, it's only used in ThreadedVM - vm->keyboardInterrupt(); + /// Emit a KeyboardInterrupt signal to stop a running threaded virtual machine. + void pkpy_tvm_terminate(ThreadedVM* vm){ + vm->terminate(); } __EXPORT diff --git a/src/vm.h b/src/vm.h index 113f42d7..40bcc852 100644 --- a/src/vm.h +++ b/src/vm.h @@ -1088,9 +1088,7 @@ class ThreadedVM : public VM { void __deleteThread(){ if(_thread != nullptr){ - if(_state == THREAD_RUNNING || _state == THREAD_SUSPENDED){ - keyboardInterrupt(); - } + terminate(); _thread->join(); delete _thread; _thread = nullptr; @@ -1109,6 +1107,13 @@ public: }); } + void terminate(){ + if(_state == THREAD_RUNNING || _state == THREAD_SUSPENDED){ + keyboardInterrupt(); + while(_state != THREAD_FINISHED); + } + } + void suspend(){ if(_state != THREAD_RUNNING) UNREACHABLE(); _state = THREAD_SUSPENDED;