Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从线程调用PyObject_调用会导致堆栈溢出 我尝试使用绝地来创建一个定制的Python编辑器,我使用C++,它工作得很好,但是它有点慢,而且在一段时间内停滞,所以我在C++中的线程中调用这些函数,但是这样做有时会有堆栈溢出错误。_Python_C++_Unreal Engine4_Jedi Vim - Fatal编程技术网

从线程调用PyObject_调用会导致堆栈溢出 我尝试使用绝地来创建一个定制的Python编辑器,我使用C++,它工作得很好,但是它有点慢,而且在一段时间内停滞,所以我在C++中的线程中调用这些函数,但是这样做有时会有堆栈溢出错误。

从线程调用PyObject_调用会导致堆栈溢出 我尝试使用绝地来创建一个定制的Python编辑器,我使用C++,它工作得很好,但是它有点慢,而且在一段时间内停滞,所以我在C++中的线程中调用这些函数,但是这样做有时会有堆栈溢出错误。,python,c++,unreal-engine4,jedi-vim,Python,C++,Unreal Engine4,Jedi Vim,这是我的密码: //~ Create Script Instance class PyObject* pScript = PyObject_Call( PyObject_GetAttrString(GetJediModule(), "Script"), PyTuple_Pack(1, PyString_FromString(TCHAR_TO_UTF8(*Source

这是我的密码:

//~ Create Script Instance class
PyObject* pScript = PyObject_Call(
                            PyObject_GetAttrString(GetJediModule(), "Script"),
                            PyTuple_Pack(1, PyString_FromString(TCHAR_TO_UTF8(*Source))), 
                            NULL);

if (pScript == NULL)
{
    UE_LOG(LogTemp, Verbose, TEXT("unable to get Script Class from Jedi Module"));
    Py_DECREF(pScript);
    ClearPython();
    return;
}

//~ Call complete method from Script Class
PyObject* Result = PyObject_Call(
                            PyObject_GetAttrString(pScript, "complete"), 
                            PyTuple_Pack(2, Py_BuildValue("i", Line), Py_BuildValue("i", Offset)), 
                            NULL);

if (Result == NULL)
{
    UE_LOG(LogTemp, Verbose, TEXT("unable to call complete method from Script class"));
    Py_DECREF(Result);
    ClearPython();
    return;
}

调用PyObject_call时出错,我假设是因为线程,因为当我从主线程调用函数时,它工作正常,但是堆栈没有告诉我任何有用的东西,只是python.dll中的一个错误,当我在UE中启动我的线程时,可以选择堆栈大小,我使用了一个1024的超小值,我做了一个小的修改,我已经测试了3个小时,没有崩溃,所以我想现在可以安全地假设它正在工作

下面是如何设置堆栈大小,第三个参数是堆栈大小:

Thread = FRunnableThread::Create(this, TEXT("FAutoCompleteWorker"), 8 * 8 * 4096, TPri_Normal);

谢谢你找到这个!绝地武士确实需要一个具有一定大小的堆栈,因为它经常使用递归。