blueloveTH 3 سال پیش
والد
کامیت
e5c96c2732
2فایلهای تغییر یافته به همراه11 افزوده شده و 7 حذف شده
  1. 3 4
      src/pocketpy.h
  2. 8 3
      src/vm.h

+ 3 - 4
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

+ 8 - 3
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;