我有一个使用多个线程的C ++ API,并且我正在将该API扩展为通过boost.python在Python中使用。
我已经为C ++ API编写了一个包装类,称为“ SDK”。回调在SDK的构造函数中注册。这个想法是API有另一个线程,当图像数据准备就绪时,该线程将调用回调函数。该代码可在C ++中运行,但是在我的Python代码中从未达到过回调函数。
我认为这与Python如何处理线程有关。我假设Python解释器不知道回调函数。我发现有关此主题的文档很少。有人可以告诉我我所缺少的内容和一些相应的文档吗?
这与全局翻译锁定有关吗?
SDK.hpp
class SDK{
public:
SDK();
void process_image_callback();
void capture_img_frames(int frames);
private:
bool _capture_image_frame_flag;
int _img_frame_count;
}
SDK.cpp
SDK::SDK()
{
setOnImageFrameCallback(std::bind(&SDK::process_image_callback, this,
std::placeholders::_1));
}
void SDK::process_image_callback()
{
std::cout << "entered image callback" << std::endl;
if(_capture_image_frame_flag){
_img_frame_count++;
}
}
void SDK::capture_img_frames(int frames)
{
_img_frame_count = 0;
_capture_image_frame_flag = true;
while (_img_frame_count < frames){
// Wait while callback is processed
}
}
BOOST_PYTHON_MODULE(SDK)
{
using namespace boost::python;
class_<SDK>("SDK", init<>())
.def("capture_img_frames", &SDK::capture_img_frames)
.def("process_image_callback", &SDK::process_image_callback)
;
}
int main(){
std::unique_ptr<SDK> sdk;
sdk->capture_img_frames(1);
}