中断在Windows C API中嵌入Python的持久线程

时间:2016-03-21 17:47:58

标签: python c++ windows multithreading

我正在尝试编写一个简单的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 "";
}

0 个答案:

没有答案