> On 15 Apr 2020, at 21:18, Eko palypse <ekopaly...@gmail.com> wrote: > > 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>
I assume you are a C++ developer and can look at the stack of the thread. What is the thread doing? Is it in python code? Is it in windows code? Barry > . > > 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 > -- https://mail.python.org/mailman/listinfo/python-list