in my C++ app, on the main thread i init python, init threads, then call PyEval_SaveThread(), since i'm not going to do any more python on the main thread.
then when the user invokes a script, i launch a preemptive thread (boost::threads), and from there, i have this: static int CB_S_Idle(void *in_thiz) { CT_RunScript *thiz((CT_RunScript *)in_thiz); return thiz->Idle(); } int Idle() { int resultI = 0; OSStatus err = noErr; ERR(i_taskRecP->MT_UpdateData(&i_progData)); if (err) { resultI = -1; } ERR(ScheduleIdleCall()); return err; } int ScheduleIdleCall() { int resultI(Py_AddPendingCall(CB_S_Idle, this)); CFAbsoluteTime timeT(CFAbsoluteTimeGetCurrent()); SuperString str; str.Set(timeT, SS_Time_LOG); Logf("$$$ Python idle: (%d) %s\n", resultI, str.utf8Z()); return resultI; } virtual OSStatus operator()(OSStatus err) { ScPyGILState sc; ERR(ScheduleIdleCall()); ERR(PyRun_SimpleString(i_script.utf8Z())); return err; } so, my operator() gets called, and i try to schedule an Idle call, which succeeds, then i run my script. however, the CB_S_Idle() never gets called? the MT_UpdateData() function returns an error if the user had canceled the script must i schedule a run-loop on the main thread or something to get it to be called? -- http://mail.python.org/mailman/listinfo/python-list