EDSDK:如果打开相机会话,等待几秒钟并拍照,则会出错

时间:2015-03-13 15:12:21

标签: c++ edsdk

我使用EDSDK控制佳能EOS 1200D。

我试试这段代码:

err = EdsOpenSession(_camera);
if(err != EDS_ERR_OK)
    std::cout << "[ERROR] : EdsOpenSession" << std::endl;
QThread::sleep(5);
err = EdsSetObjectEventHandler(_camera, kEdsObjectEvent_All, handleObjectEvent, (EdsVoid*)&_path);
if(err != EDS_ERR_OK)
    std::cout << "[ERROR] : EdsSetObjectEventHandler" << std::endl;    
EdsInt32 saveTarget = kEdsSaveTo_Host;
err = EdsSetPropertyData(_camera, kEdsPropID_SaveTo, 0, 4, &saveTarget);
if(err != EDS_ERR_OK)
    std::cout << "[ERROR] : EdsSetPropertyData kEdsSaveTo_Host" << std::endl;
EdsCapacity newCapacity = {0x7FFFFFFF, 0x1000, 1};
err = EdsSetCapacity(_camera, newCapacity);
if(err != EDS_ERR_OK)
    std::cout << "[ERROR] : EdsSetPropertyData newCapacity" << std::endl;
err = EdsSendCommand(_camera, kEdsCameraCommand_TakePicture, 0);
if(err != EDS_ERR_OK)
    std::cout << "[ERROR] : takePicture " << err << std::endl;

在我进行睡眠时{I} EDS_ERR_TAKE_PICTURE_CARD_NG 0x00008D07L,我会收到错误EdsSendCommand(_camera, kEdsCameraCommand_TakePicture, 0)。 没有睡眠,一切运作良好。

相机会话是否超时?

1 个答案:

答案 0 :(得分:1)

我在C#中遇到了同样的问题。我通过使用Timer组件运行其余代码解决了这个问题。我认为EDSDK不太喜欢Threads。

如果您正在为Windows编译,可以使用SetTimer函数。

该链接讨论了该功能。 https://msdn.microsoft.com/en-us/library/windows/desktop/ms644906%28v=vs.85%29.aspx

我希望你能解决问题。