Added basic win32 start-thread support
parent
fa2dccd6d3
commit
0a15e20e12
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue