我正在写一个基于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