Один раз openDevice()
возвращается успешно, двигатель вызывает startCapture()
вашего адаптера функция для начала сбора данных.
Двигатель вызывает stopCapture()
вашего адаптера функция, когда пользователь вызывает
stop
или closepreview
функция для объекта входа видео или когда заданное количество систем координат было получено, и сбор завершен. Для примера,
vid = videoinput('winvideo',1); set(vid,'FramesPerTrigger',1000); // start(vid); stop(vid);
The startCapture()
функция обычно выполняет следующие задачи.
Проверьте, происходит ли приобретение, используя IAdaptor
функции представителя isAcquiring()
. Если это так, выход.
Отправка сообщения в поток сбора с помощью Windows® PostThreadMessage()
функция, указывающая ей начать получать системы координат изображения от устройства. Для получения дополнительной информации см. раздел «Отправка сообщения в поток сбора».
Примечание
Отправка начального сообщения в поток сбора требуется только в том случае, если ваш адаптер использует проект на основе потоков. Адаптеры также могут использовать асинхронные прерывания (коллбэки) для получения систем координат, если устройство поддерживает это. Для получения дополнительной информации см. документацию, поставляемую с пакетом SDK вашего устройства.
The startCapture()
функция также обычно гарантирует, что используются последние свойства объекта сбора изображений (см. «Реализация Get and Set Support for Device-Specific Properties»), и конфигурирует аппаратные триггеры, если они поддерживаются и устанавливаются (см. «Support Hardware Triggers»).
Чтобы отправить сообщение потоку, используйте PostThreadMessage()
Windows функция. Функция потока сбора адаптера использует Windows
GetMessage()
функция для получения этих сообщений - см. Пример: Открытие соединения.
The PostThreadMessage()
функция принимает эти параметры:
BOOL PostThreadMessage( DWORD idThread, UINT Msg, WPARAM wParam, LPARAM lParam );
В следующей таблице описывается, как задать эти параметры для адаптера. Дополнительные сведения о отправке сообщений потоков см. в документе Microsoft Docs.
Параметр | Описание |
---|---|
| Идентификатор потока, в который должно быть отправлено сообщение, возвращенный |
| Сообщение для проводки. Microsoft® задает область значений значений для пользовательских сообщений, начиная со значения |
| Дополнительная информация, относящаяся к сообщениям |
| Дополнительная информация, относящаяся к сообщениям |
Этот пример иллюстрирует простое startCapture()
функция. Эта функция не принимает аргументов и возвращает логическое значение, указывающее, находится ли объект входа видео в start
состояние.
Замените реализацию заглушки в MyDeviceAdaptor.cpp
файл с этим кодом, а затем перестроите адаптер.
bool MyDeviceAdaptor::startCapture(){ // Check if device is already acquiring frames. if (isAcquiring()) return false; // Send start message to acquisition thread PostThreadMessage(_acquireThreadID, WM_USER, 0, 0); return true; }
Запуск MATLAB® и запустите адаптер, чтобы убедиться, что ваш поток сбора получает начальное сообщение from startCapture()
.
The stopcapture()
функция обычно выполняет эти задачи.
Проверяет, остановлен ли адаптер, вызывая isAcquiring()
функция. Если устройство в данный момент не получает данные, вернитесь true
.
Останавливает цикл сбора систем координат и останавливает устройство, при необходимости
Примечание
Важно не выходить из stopCapture()
функция, в то время как функция потока приема все еще получает системы координат. Один из способов сделать это - попытаться приобрести критический раздел. Когда вы можете получить критическое сечение, вы можете быть уверены, что цикл сбора систем координат закончен, отказавшись от его критического сечения.
Следующий пример иллюстрирует простое stopCapture()
функция. Эта функция не принимает аргументов и возвращает логическое значение, указывающее, находится ли объект входа видео в stopped
состояние. Замените реализацию заглушки в MyDeviceAdaptor.cpp
файл с этим кодом, а затем перестроите адаптер.
bool MyDeviceAdaptor::stopCapture(){ // If the device is not acquiring data, return. if (!isOpen()) return true; //********************************************************** // Insert calls to your device's SDK to stop the device, if // necessary. //********************************************************** return true; }
The stopCapture()
функция в демонстрационном адаптере предоставляет другой пример того, как остановить цикл сбора систем координат. Адаптер задает переменную флага, которую он проверяет каждый раз, когда входит в цикл сбора систем координат. Чтобы выйти из цикла сбора систем координат, демонстрационный адаптер устанавливает эту переменную флага на false. Для получения дополнительной информации см. исходный код демо-адаптера.