CPP到Python的通信问题-在获取ThreadState之前陷入困境

CPP到Python的通信问题-在获取ThreadState之前陷入困境,python,c++,multithreading,python-2.7,python-multithreading,Python,C++,Multithreading,Python 2.7,Python Multithreading,我们正在尝试一个简单的程序,它将从cpp到python进行通信 这是我们的代码(为了简单而修改) #包括“iostream” #包括 using namespace std; PyInterpreterState* _InterpState=NULL; class APPNAME_PyLock { public: /// Acquire the lock APPNAME_PyLock(bool lock = true) : _lock(lock) {

我们正在尝试一个简单的程序,它将从cpp到python进行通信 这是我们的代码(为了简单而修改) #包括“iostream” #包括

using namespace std;

PyInterpreterState* _InterpState=NULL;

class APPNAME_PyLock
{
public:
    /// Acquire the lock
    APPNAME_PyLock(bool lock = true)
        : _lock(lock)
    {
        cout<<"Inside APPNAME_PyLock () function    CPlock1"<<endl;
        if (_lock)
        {
            cout<<"CPlock2"<<endl;
                _threadState = PyThreadState_New(_InterpState);         
                cout<<"CPlock3"<<endl;
            PyEval_AcquireThread(_threadState);
            cout<<"CPlock4"<<endl;
        }
    }
    /// Release the lock
    ~APPNAME_PyLock()
    {
        if (_lock)
        {
            PyEval_ReleaseThread(_threadState);
            PyThreadState_Clear(_threadState);
                PyThreadState_Delete(_threadState);
        }
    }
private:
    bool _lock;
    PyThreadState* _threadState;
};


#ifdef __cplusplus
extern "C"
{
#endif

PyObject* pycall_Shutdown(PyObject* self, PyObject* args);

#ifdef __cplusplus
}
#endif

PyMethodDef _SessionMethods[] =
{    
    {(char *)"writeOutput",         pycall_Shutdown,                METH_VARARGS, (char *)"Output to standard output stream."},
    {0, 0, 0, 0}
};

PyObject* pycall_Shutdown(PyObject* self, PyObject* args)
{

cout<<"I am form shutdown"<<endl;
        return 0;
}

int main(int argc, char *argv[])
{

        Py_Initialize();

            PyObject* _SessionModule = 0;
        PyEval_InitThreads();
        cout<<"CP5"<<endl;
        PyThreadState* threadState = PyThreadState_Get();
        cout<<"CP5.1"<<endl;
        _InterpState = threadState->interp;

        APPNAME_PyLock();

        cout<<"CP5.3"<<endl;
        _SessionModule = Py_InitModule3((char *)"ttsession", _SessionMethods, (char *)"Built-in module to run TTServer.");
        cout<<"CP7"<<endl;
        PyEval_ReleaseThread(threadState);
        cout<<"END OF EXECUTION\n\n\n";

        Py_Finalize();

        return 0;
}
我使用的是Python 2.7.8(安装在c:\Python27文件夹中)

我在当前文件夹中有一个名为“lib”的文件夹。此文件包含以下文件: python27.lib,python27\u d.lib.

我已将c:\Python27中的DLL文件夹和Lib文件夹复制到当前文件夹中名为python的文件夹中

要运行文件,请将目录更改为lib,然后键入“Try3run.exe

在获取锁之前,程序在函数APPNAME_PyLock()的检查点3(CPlock3)处失败

我做错什么了吗

有什么办法可以让我摆脱这个麻烦吗

注意:我正在visual studio命令提示符下运行此命令

cl /c Try3.cpp /IC:\Python27\include
link /link -debug /OUT:"./lib/Try3run.exe" Try3.obj /LIBPATH:"c:/Python27/libs" python27.lib
cd /d %~dp0%
set PATH=%PATH%;%~dp0%lib