如何在从 boost::python 模块执行进程时继续使用控制台?我想我必须使用线程,但我想我错过了一些东西。
import pk #my boost::python module from c++
import threading
t = threading.Thread(target=pk.showExample, args=())
t.start()
这将执行 showExample,它运行一个渲染 3D 内容的窗口。现在我想在这个窗口运行时继续在 python 控制台中编码。上面的示例可以显示窗口,但无法保持控制台交互。任何想法如何做到这一点?感谢您的任何建议。
问候克里斯
编辑:我还尝试在 showExample() C++ 代码中创建线程,但效果不佳。我可能必须使控制台成为线程,但我不知道如何并且找不到任何有用的示例。
Edit2:为了使示例更简单,我实现了这些 c++ 方法:
void Example::simpleWindow()
{
int running = GL_TRUE;
glfwInit();
glfwOpenWindow(800,600, 8,8,8,8,24,8, GLFW_WINDOW);
glewExperimental = GL_TRUE;
glewInit();
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
while(running)
{
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glfwSwapBuffers();
running = !glfwGetKey(GLFW_KEY_ESC) && gkfwGetWindowParam(GLFW_OPENED);
}
}
void Example::makeWindowThread()
{
boost::thread t(simpleWindow);
t.join();
}
可能有一些无用的代码行(它只是从我想要使用的真实方法中复制粘贴一部分。)这两种方法都是静态的。如果我在线程中启动交互式控制台并在 python 中启动 pk.makeWindowThread(),我将无法再提供输入。如果我也将 pk.makeWindowThread() 的调用放在 python 线程中,则不起作用。(我试图在显示窗口时在控制台中打印一些东西。