Здравствуйте.
Люди кто сталкивался с такой задачей:
Есть АЦП с которого поступают данные в буфер, затем он записывается на диск.
Необходимо добавить функцию которая будет строить график в отдельном окне.
Помогите с алгоритмом (или ткните носом на похожие программы).
Какие подводные камни могут быть?
И как и/или чем лучше рисовать?
Вот основной блок кода в котором происходит чтение и запись:
void func(adc::dev::IReadDevice* la, adc::dev::IWriteDevice *file)
{
HRESULT hr;
HANDLE ev[2]; // Объекты синхронизации для чтения/записи
size_t r_offset,w_offset; // Смещение от начала буфера для чтения/записи
bool r_swap = true; // Флаг переключающий смещение от начала буфера для чтения
bool w_swap = true; // Флаг переключающий смещение от начала буфера для записи
boost::timer timer;
time_t run_time = adc::util::Global::params().getTime();
size_t size = adc::util::Global::params().getBufferSize(); // Размер буфера в байтах
char* buf = (char*)_aligned_malloc(size*4, 16); // Один общий массив данных выравненный на 2 байта
ev[0] = ::CreateEvent(NULL, FALSE, FALSE, NULL); // Чтение
ev[1] = ::CreateEvent(NULL, FALSE, FALSE, NULL); // Запись
timer.restart();
la->read(buf, size, (HANDLE)ev[0]);
while(run_time == 0 || timer.elapsed() < run_time)
{
printf("\rProcess: total %.2f s | current %.2f s | elapsed %.2f s",
(float)run_time, (float)timer.elapsed(), (float)(run_time - timer.elapsed()));
LOG_DBG("main: try wait...");
hr = ::WaitForMultipleObjects(2, (HANDLE*)&ev, FALSE, INFINITE);
switch (hr)
{
case WAIT_OBJECT_0: // Чтение завершено
LOG_DBG("main: send to write");
r_offset = (r_swap) ? 0 : size;
w_offset = (w_swap) ? size*2 : size*3;
adc::util::fast_memcpy(buf+w_offset, buf+r_offset, size);
file->write(buf+w_offset, size, (HANDLE)ev[1]);
w_swap = !w_swap;
r_swap = !r_swap;
break;
case WAIT_OBJECT_0+1: // Запись завершена
LOG_DBG("main: send to read");
r_offset = (r_swap) ? 0 : size;
la->read(buf+r_offset, size, (HANDLE)ev[0]);
break;
default:
LOG_DBG("main: error wait");
}
}
_aligned_free((void*)buf);
}
Z> ммм....печально....вообще никаких мыслей????
В качестве универсального (не не обязательно удачного) решения могу посоветовать MSChart
Posted via RSDN NNTP Server 2.0
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте.
А>Люди кто сталкивался с такой задачей:
А>Есть АЦП с которого поступают данные в буфер, затем он записывается на диск.
А>Необходимо добавить функцию которая будет строить график в отдельном окне.
А>Помогите с алгоритмом (или ткните носом на похожие программы).
А>Какие подводные камни могут быть?
А>И как и/или чем лучше рисовать?
А>Вот основной блок кода в котором происходит чтение и запись:
Вариантов много, можеш использовать готовые компоненты, тот же Excell, MSChart мошешь написать свой вариант, ключевое слово апрокмация (сплайнами например)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>