Common Vision Blox 15.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Friends Modules Pages
ImageManager/Cvb.Net/Ringbuffer

This example program is located in your CVB installation under %CVB%Tutorial/ImageManager/Cvb.Net/Ringbuffer.

Program.cs:

// Example that demonstrates the ring buffer handling with locking and unlocking buffers.

using System;
using System.Collections.Generic;
namespace Ringbuffer
{
class Ringbuffer
{
static void Main(string[] args)
{
using (var devices = DeviceFactory.Discover(DiscoverFlags.IgnoreVins))
{
using (var device = DeviceFactory.Open(devices[0], AcquisitionStack.Vin))
{
var stream = device.Stream;
stream.RingBuffer.ChangeCount(5, DeviceUpdateMode.UpdateDeviceImage);
stream.RingBuffer.LockMode = RingBufferLockMode.On;
Console.WriteLine($"Buffers allocated: {stream.RingBuffer.Count} | Lock mode: {stream.RingBuffer.LockMode}");
stream.Start();
List<StreamImage> images = new List<StreamImage>();
for (int i = 0; i < 10; i++)
{
WaitStatus status;
var image = stream.WaitFor(UsTimeSpan.FromSeconds(5), out status);
if (status == WaitStatus.Ok)
{
images.Add(image);
Console.WriteLine($"Images list size: {images.Count}");
}
else if (status == WaitStatus.Timeout && images.Count > 0)
{
(images[0] as RingBufferImage).Unlock();
images.RemoveAt(0);
Console.WriteLine($"Image unlocked");
}
}
images.Clear();
stream.Abort();
}
}
}
}
}
static Device Open(DiscoveryInformation info, AcquisitionStack acquisitionStack=AcquisitionStack.PreferVin)
static DiscoveryInformationList Discover()
void Unlock()
static UsTimeSpan FromSeconds(double seconds)