virtual bool OnInit();
virtual ~MyApp();
void Init_wxPython();
-private:
- PyThreadState* m_mainTState;
};
wxPyCoreAPI_IMPORT();
// Ensure that the new classes defined in the wxPython wrappers are
- // recognised by the wx RTTI system. (If you don't use wxWindow in
+ // recognised by the wx RTTI system. (If you don't use wxWindows in
// your C++ app you won't need to do this.)
wxClassInfo::CleanUpClasses();
wxClassInfo::InitializeClasses();
// Save the current Python thread state and release the
// Global Interpreter Lock.
- m_mainTState = wxPyBeginAllowThreads();
+ wxPyBeginAllowThreads();
}
MyApp::~MyApp()
{
// Restore the thread state and tell Python to cleanup after itself.
- wxPyEndAllowThreads(m_mainTState);
+ wxPyEndAllowThreads(true);
Py_Finalize();
}
// First, whenever you do anyting with Python objects or code, you
// *MUST* aquire the Global Interpreter Lock and block other
// Python threads from running.
- wxPyBeginBlockThreads();
+ bool blocked = wxPyBeginBlockThreads();
// Execute the code in the __main__ module
PyRun_SimpleString(python_code1);
// Finally, release the GIL and let other Python threads run.
- wxPyEndBlockThreads();
+ wxPyEndBlockThreads(blocked);
}
output = wxPyOnDemandOutputWindow()\n\
sys.stdin = sys.stderr = output\n\
";
- wxPyBeginBlockThreads();
+ bool blocked = wxPyBeginBlockThreads();
PyRun_SimpleString(python_redirect);
- wxPyEndBlockThreads();
+ wxPyEndBlockThreads(blocked);
}
PyObject* result;
// As always, first grab the GIL
- wxPyBeginBlockThreads();
+ bool blocked = wxPyBeginBlockThreads();
// Now make a dictionary to serve as the global namespace when the code is
// executed. Put a reference to the builtins module in it. (Yes, the
Py_DECREF(tuple);
// Finally, after all Python stuff is done, release the GIL
- wxPyEndBlockThreads();
+ wxPyEndBlockThreads(blocked);
return window;
}