]> gitweb.factorcode.org Git - factor.git/commitdiff
Added basic win32 start-thread support
authorPhil Dawes <phil@phildawes.net>
Sun, 23 Aug 2009 13:36:24 +0000 (14:36 +0100)
committerPhil Dawes <phil@phildawes.net>
Wed, 16 Sep 2009 07:17:26 +0000 (08:17 +0100)
vm/factor.cpp
vm/factor.hpp
vm/os-windows-nt.cpp
vm/os-windows-nt.hpp

index 55d7abcc4957f2df0b7dd5b83a4e5ab4163f54c9..883b4f94627e9da9db5f06fa49a13e51bd387153 100755 (executable)
@@ -277,4 +277,30 @@ VM_C_API void factor_sleep(long us)
        return vm->factor_sleep(us);
 }
 
+struct startargs {
+       int argc;
+       vm_char **argv;
+};
+
+void* start_standalone_factor_thread(void *arg) 
+{
+       factorvm *newvm = new factorvm;
+       startargs *args = (startargs*) arg;
+       vm_parameters p;
+       newvm->default_parameters(&p);
+       newvm->init_parameters_from_args(&p,args->argc, args->argv);
+       newvm->init_factor(&p);
+       newvm->pass_args_to_factor(args->argc,args->argv);
+       newvm->start_factor(&p);
+       return 0;
+}
+
+
+VM_C_API void start_standalone_factor_in_new_thread(int argc, vm_char **argv)
+{
+       startargs *args = new startargs;   // leaks startargs structure
+       args->argc = argc; args->argv = argv;
+       start_thread(start_standalone_factor_thread,args);
+}
+
 }
index 6e00bc012e32122a291cd05845ce6f75b09949e5..b2aeccd1a621434bf4b0d0b7d74a383b517fbbf6 100644 (file)
@@ -7,6 +7,7 @@ VM_C_API void init_factor(vm_parameters *p);
 VM_C_API void pass_args_to_factor(int argc, vm_char **argv);
 VM_C_API void start_embedded_factor(vm_parameters *p);
 VM_C_API void start_standalone_factor(int argc, vm_char **argv);
+VM_C_API void start_standalone_factor_in_new_thread(int argc, vm_char **argv);
 
 VM_C_API char *factor_eval_string(char *string);
 VM_C_API void factor_eval_free(char *result);
index 535e7b8640c5ec674ffd87f4c6b09272d4a6c400..9187b88986842a2337b6b073bda7b47e7236c2d0 100755 (executable)
@@ -3,6 +3,11 @@
 namespace factor
 {
 
+void start_thread(void *(*start_routine)(void *),void *args){
+    CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)start_routine, args, 0, 0); 
+}
+
+
 s64 factorvm::current_micros()
 {
        FILETIME t;
index c083844ae073909675944c3d30322ca94b4c5723..27923a000a077b91438c93a46135f63a64aba176 100755 (executable)
@@ -21,9 +21,12 @@ typedef char symbol_char;
 
 FACTOR_STDCALL LONG exception_handler(PEXCEPTION_POINTERS pe);
 
+
 // SSE traps raise these exception codes, which are defined in internal NT headers
 // but not winbase.h
 #define STATUS_FLOAT_MULTIPLE_FAULTS 0xC00002B4
 #define STATUS_FLOAT_MULTIPLE_TRAPS  0xC00002B5
 
+void start_thread(void *(*start_routine)(void *),void *args);
+
 }