exponenta event banner

Управление использованием памяти

Освобождение памяти

Иногда при получении данных изображения может потребоваться удалить некоторые или все кадры, хранящиеся в памяти. Использование flushdata можно удалить все кадры, хранящиеся в настоящее время в памяти, или только те кадры, которые связаны с выполнением триггера.

Следующий пример иллюстрирует использование flushdata для удаления всех кадров в памяти или одного триггера.

  1. Создать объект получения изображения - в этом примере создается объект ввода видео для устройства получения изображения Windows ®. Для запуска этого примера в системе используйте imaqhwinfo чтобы получить конструктор объекта для устройства получения изображения и заменить этот синтаксис следующим кодом.

    vid = videoinput('winvideo',1);
  2. Настроить свойства - для этого примера настройте получение пяти кадров на триггер и, чтобы показать эффект flushdata, настройте несколько триггеров с помощью TriggerRepeat собственность.

    vid.FramesPerTrigger = 5
    vid.TriggerRepeat = 2;
  3. Запуск объекта сбора изображений - вызовите start для запуска объекта получения изображения.

    start(vid)

    Объект выполняет немедленный триггер, получает пять кадров данных и повторяет этот триггер еще два раза. После регистрации указанного количества кадров объект прекращает работу.

    Чтобы убедиться, что объект получил данные, просмотрите значение FramesAvailable собственность. Это свойство сообщает, сколько кадров в данный момент хранится в буфере памяти.

    vid.FramesAvailable
    ans =
    
       15
  4. Удаление данных изображения по значению триггера - вызовите flushdata функция, задание режима 'triggers'. При этом удаляются кадры, связанные с самым старым триггером.

    flushdata(vid,'triggers');

    На следующем рисунке показаны кадры, полученные до и после вызова flushdata. Обратите внимание, как flushdata удаляет кадры, связанные с самым старым триггером.

    Чтобы убедиться, что объект удалил кадры, просмотрите значение FramesAvailable собственность.

    vid.FramesAvailable
    ans =
    
       10
  5. Очистить весь буфер памяти - вызов flushdata без указания режима удаляет все кадры, хранящиеся в памяти.

    flushdata(vid);

    Чтобы убедиться, что объект удалил кадры, просмотрите значение FramesAvailable собственность.

    vid.FramesAvailable
    ans =
    
       0
  6. Очистить - всегда удалять объекты сбора изображений из памяти и переменные, которые ссылаются на них, когда они больше не нужны.

    delete(vid)
    clear vid