佳能SDK:下载由两个设备拍摄的最新画面,主办(Canon SDK: Download latest

2019-10-18 03:21发布

我正在写一个基于Windows的应用程序在Visual Studio 2010中我的主机连接到两个佳能EOS 600D。 到目前为止,我管理的两个拍照,直接下载(不带SD卡)PC主机和存储下的主机上的特定名称的图片。 如果我在一个循环中执行我的代码,它也能正常工作(循环的索引指定相机和目标文件)。 在接下来的步骤我用OpenMP2.0加快循环(这是我使用OpenMP的第一个项目)。 现在,图像被同时服用,但unfortunaly两个图片由相同的消息循环(或者相机0或相机1),而不是每个任务的相应消息循环处理。 其结果是,从相机缓冲器中的图片被存储在同一文件中。

如果任何人有一个想法如何摆脱这个问题,这将是巨大的。 从我的观点来看,最有利的解决办法是,那我告诉消息循环(因为我发现,一个就够了),从该线程/摄像头画面已被占用。 这也将是巨大的,如果我能避免使用互斥,因为这将我的算法慢下来。

这是我的事件处理程序,到目前为止,它的工作原理,但为threadno已被发现

EdsError EDSCALLBACK fHandleObjectEvent( EdsObjectEvent event,EdsBaseRef object,EdsVoid * context){
  if(event){fDownloadImage(object,threadNo}
  /// Object must be released
  if(object){EdsRelease(object);}
  return EDS_ERR_OK;
}

而我的主要功能

int main(int argc, char** argv){
  #pragma omp parallel for
  for(int ii=0;ii<2;ii++){
    fTakePicture(ii);
  }
  return 0;
}

提前致谢。

编辑1:我刚刚发现,如果我禁用Windows消息循环(报价出来)程序显示以下行为:

第一次执行:取2张图片

第二次执行:下载两张图片形成之前的执行,需要2张新的图片

如此看来,线程数和消息存储在某种程度上,它生存的执行和它在未来执行重装上阵(如果被破坏或没有主窗口没关系)。 所以,我一定要得到它变成正确的顺序。

编辑2:现在我发现这似乎正常工作的解决方案。 我通过机身上的序列号解决了这个问题,但因此,我不得不回去佳能EDSDK版本2.11.3,因为该功能kEdsPropID_BodyIDEx在2.12版本禁用。 我希望这将帮助其他用户解决类似的任务。

干杯TL

Answer 1:

您应该区分使用回调的“语境”参数中的两个摄像头。 只要当你注册EdsSetObjectEventHandler回调传递独特的价值观为每个摄像机作为最后一个参数。



文章来源: Canon SDK: Download latest picture taken by two devices to host