使用Boost.Python将多线程C ++ API扩展到Python

时间:2018-09-10 18:35:08

标签: python boost gil python-extensions

我有一个使用多个线程的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);
}

0 个答案:

没有答案