Hi all, can anybody explain me why the following code is not running:
// #include "stdafx.h" #include <windows.h> #include <strsafe.h> #include <stdio.h> #include "Python.h" DWORD WINAPI Callback1( LPVOID lpvData){ PyObject *pName, *pModule, *pDict, *pFunc, *pValue; PyThreadState* tcur = PyThreadState_Get() ; PyThreadState_Swap(NULL); PyThreadState_Clear(tcur); PyThreadState_Delete(tcur); // release the GIL as PyEval_InitThreads // implicitly acquires the GIL PyEval_ReleaseLock(); PyGILState_STATE gstate; for(int i = 0; i < 20; i++){ gstate = PyGILState_Ensure(); pName = PyString_FromString("test1"); pModule = PyImport_Import(pName); pDict = PyModule_GetDict(pModule); pFunc = PyDict_GetItemString(pDict, "test"); if (PyCallable_Check(pFunc)) { pValue = PyObject_CallObject(pFunc, NULL); } else { PyErr_Print(); } // Clean up Py_DECREF(pModule); Py_DECREF(pName); PyGILState_Release(gstate); Sleep(1000); } return TRUE; }; DWORD WINAPI Callback2( LPVOID lpvData){ PyObject *pName, *pModule, *pDict, *pFunc, *pValue; PyThreadState* tcur = PyThreadState_Get() ; PyThreadState_Swap(NULL); PyThreadState_Clear(tcur); PyThreadState_Delete(tcur); // release the GIL as PyEval_InitThreads // implicitly acquires the GIL PyEval_ReleaseLock(); PyGILState_STATE gstate; for(int i = 0; i < 20; i++){ gstate = PyGILState_Ensure(); pName = PyString_FromString("test1"); pModule = PyImport_Import(pName); // pDict and pFunc are borrowed references pDict = PyModule_GetDict(pModule); pFunc = PyDict_GetItemString(pDict, "test"); if (PyCallable_Check(pFunc)) { pValue = PyObject_CallObject(pFunc, NULL); } else { PyErr_Print(); } // Clean up Py_DECREF(pModule); Py_DECREF(pName); PyGILState_Release(gstate); Sleep(1000); } return TRUE; }; int main(int argc, char *argv[]) { Py_Finalize(); Py_Initialize(); PyEval_InitThreads(); DWORD threadID; CreateThread(NULL,10000 ,Callback1,(LPVOID)NULL,0,&threadID); CreateThread(NULL,10000 ,Callback2,(LPVOID)NULL,0,&threadID); getchar(); Py_Finalize(); return 0; } If I start just one Thread: CreateThread(NULL,10000 ,Callback1,(LPVOID)NULL,0,&threadID); //CreateThread(NULL,10000 ,Callback2,(LPVOID)NULL,0,&threadID); every thing is fine. The second thread stops with: Fatal Python error: PyThreadState_Get: no current thread Thanks in advance Thorsten -- GMX startet ShortView.de. Hier findest Du Leute mit Deinen Interessen! Jetzt dabei sein: http://www.shortview.de/[EMAIL PROTECTED] _______________________________________________ python-win32 mailing list python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32