Как сохранить мою камеру живой, когда я использую Cannon EDSDK в своем коде C++?

Я думаю, что важно отправлять сообщение на камеру каждые несколько минут, поэтому я инициализирую свою камеру и время от времени отправляю сообщение на камеру в своем основном потоке, а в другом - открываю liveview для обработки других моих заданий., но в ветке liveview время ожидания при отправке этого сообщения:

EdsSetPropertyData(theCamera, kEdsPropID_Evf_Mode, 0, sizeof(evfMode), &evfMode)

Я никогда не сталкивался с этим, когда все работы выполнялись в одном потоке , Я не знаю, почему это происходит так, кто-то может мне помочь? Вот часть моего кода.

мой основной поток: (я не отправляю сообщение keepalive в теме, но также и время ожидания при запуске liveview!)

CanonCameraWrapper& wrapper = param->wrapper;
bool setup_ok = wrapper.setup(0);
if (!setup_ok)
{
    wrapper.destroy();
}
wrapper.setDownloadPath("img");
pthread_t camera_thread;
pthread_create(&camera_thread, NULL, camera_thread_func, (void *)(param));
pthread_join(camera_thread, NULL);

другая нить

void * camera_thread_func(void * arg)
{
    global_param* param = (global_param*)arg;
    CanonCameraWrapper& wrapper = param->wrapper;
    wrapper.beginLiveView();//**//it wait time out here!!!**
    ...
}

1 ответ

Я считаю, что есть две вещи, о которых вы должны знать. Одним из них является это уведомление в документации Canon SDK:

При создании приложений, работающих под Windows, для каждого потока требуется инициализация COM, чтобы получить доступ к камере из потока, отличного от основного потока. Чтобы создать пользовательский поток и получить доступ к камере из этого потока, обязательно запустите CoInitializeEx( NULL, COINIT_APARTMENTTHREADED) в начале потока и CoUnInitialize() в конце. Пример кода показан ниже. То же самое происходит при управлении объектами EdsVolumeRef или EdsDirectoryItemRef из другого потока, а не только с помощью EdsCameraRef

Другое дело: вы не можете получить доступ (в большинстве случаев) к SDK одновременно. Так что, если вы используете несколько потоков, вы должны быть осторожны с этим

Другие вопросы по тегам