Thank you for your suggestion. I will give it a try. > What is the "stuck" thread doing? waiting for a lock?
No, it should open a dialog created with DialogBoxIndirectParamW <https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-dialogboxindirectparamw> . Eren Am Mi., 15. Apr. 2020 um 20:12 Uhr schrieb Barry Scott < ba...@barrys-emacs.org>: > > > > On 15 Apr 2020, at 13:30, Eko palypse <ekopaly...@gmail.com> wrote: > > > > Hi everyone, > > > > the following happens on Windows7 x64 and Python37 x64 > > > > I have a plugin DLL for a C++ application in which Python37 is embedded. > > The plugin itself works, except when I want to use the threading module. > > > > If I start a Python script in my plugin which uses the threading module > > I can verify via ProcessExplorer that the thread is started, > > but it doesn't do anything (??) and the c++ application doesn't really > do anything anymore either. > > > > Only when I stop the C++ Applikation, the thread becomes active for a > short time. > > Verified with logging module over time print-outs. > > > > Apparently I did not understand everything about threads and embedded > python. > > > > Any idea what I'm doing wrong? > > This is what I typically do. > > Make sure that you have installed the Python debug files. > Now you can use the visual C++ debugger to attach to the process and > look at what the threads are doing. > > I always have the python source code on hand to read as well. > > This should give you a clue. > > What is the "stuck" thread doing? waiting for a lock? > > Barry > > > > > > > > > > The whole thing is initialized by the DllMain routine. > > > > > > BOOL APIENTRY DllMain( HANDLE hModule, > > DWORD reasonForCall, > > LPVOID /* lpReserved */ ) > > { > > switch ( reasonForCall ) > > { > > case DLL_PROCESS_ATTACH: > > if (!Py_IsInitialized()) > > { > > PyImport_AppendInittab("Npp", &PyInit_Npp); > > Py_InitializeEx(0); > > PyEval_InitThreads(); //<- this shouldn't be needed as I > understand that it is called by Py_InitializeEx anyway > > } > > PyImport_ImportModule("Npp"); > > break; > > case DLL_PROCESS_DETACH: > > Py_Finalize(); > > break; > > > > case DLL_THREAD_ATTACH: > > break; > > > > case DLL_THREAD_DETACH: > > break; > > } > > > > return TRUE; > > } > > > > and the code in the plugin which executes the python scripts is this > > > > cdef void run_code(): > > try: > > global_dict = globals() > > if '__name__' not in global_dict or global_dict['__name__'] != > '__main__': > > global_dict.update({"__name__": "__main__",}) > > exec(compile(editor.getText(), '<string>', 'exec'), global_dict) > > > > except Exception: > > MessageBoxW(nppData._nppHandle, > > traceback.format_exc(), > > 'RUN CODE EXCEPTION', > > 0) > > > > I don't know if this is important, but the DLL is generated by Cython. > > > > Thank you for reading and stay healthy > > > > Eren > > -- > > https://mail.python.org/mailman/listinfo/python-list > > > > -- https://mail.python.org/mailman/listinfo/python-list