CPP到Python的通信问题在获取线程之前卡住了

2024-10-04 01:23:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正试图有一个简单的程序,将通信从一个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;
}

这是我用来构建应用程序的批处理文件的内容

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

我使用的是python2.7.8(安装在c:\Python27文件夹中)

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

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

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

在获取锁之前,程序在函数APPNAME\u PyLock()的checkpoint3(CPlock3)处失败。你知道吗

我做错什么了吗?你知道吗

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

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


Tags: 文件夹locklibpluspyobjectpython27charcout