Re[2]: Асинхронное чтение данных через OLE DB ?
От: bezlepkin  
Дата: 24.07.04 06:10
Оценка:
Здравствуйте, Kostik00.

K>Давай разберемся


Доктору, исцелился сам

K>Куда отдаеш (Пользователю на экран?) и что с ними делаеш?


Отдаю данные в программу с весёлым названием ГОПА — графическая оболочка просмотра архивов (это не шутка, так в ТЗ!) SCADA-системы.

K>Обычно на экран отдается первая порция — а там постепенно подкачивается остальное (Такое делал здесь и ненадо никаких супер наворотов) — но милион записей — это слишком.


Для SCADA-систем миллион записей — это только закусить перед завтраком. Цикл опроса может быть (например) 1 мс, то есть с одного датчика получаем 1000 значений в сек, а всего этих приборов — легко может быть и сотня, и много больше.

Ну, это к слову. Непосредственно же решение оказалось простым, как грабли. И очень похоже на то, что предлагал Коваленко Дмитрий (см. выше в этой ветке). Данные получаются порциями по N строк. Полученная порция ставится в очередь на "отдачу", а другой поток эту очередь разгружает. И всё это в цикле, пока все данные не приплывут с сервера.

Собственно получение порций данных реализовано так:

1) IRowset::GetNextRows()
2) IRowset::GetData()
3) IRowset::ReleaseRows()

Самое весёлое, что никакие средства асинхронной обработки OLE DB не потребовались.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.