我正在尝试编写一个简单的Windows API C ++代码,允许任意执行Python代码,但如果持续时间太长(例如,5秒),则会中断执行。为简单起见,我目前将包含要执行的代码的字符串传递给函数PyRun_String()
。
这个C ++旨在被编译成.DLL,而我试图扩展的调用程序无法访问将分离Python进程或子进程的函数。
我被告知TerminateThread()
是一种不安全的结束线程的方法,因为它可能导致内存泄漏和同步错误。如何优雅地退出线程中的函数PyRun_String()
?
我的代码如下:
#include "stdafx.h"
DWORD WINAPI pystr(__in LPVOID lpParameter)
{
// Local Variables
PyObject *pResult, *pDict, *pMod;
char *str = (char*) lpParameter;
// Initialize the Python Interpreter
Py_Initialize();
// Initialize the global and local space.
pMod = PyImport_AddModule("__main__");
pDict = PyModule_GetDict(pMod);
// Run the Python String.
pResult = PyRun_String(str, Py_file_input, pDict, pDict);
// Exit
Py_Finalize();
return 0;
}
char* Run_PyString(char* str)
{
// Local Variables
HANDLE handle;
DWORD thread_id;
// Create the Thread and wait for it to return
handle = CreateThread(0, 0, pystr, (LPVOID) str, 0, &thread_id);
WaitForSingleObject(handle, INFINITE);
// Close the Thread Handle
CloseHandle(handle);
return "";
}