Организация работы с буфером
Ситуация такая. Есть буфер, - допустим, такой
myVar: array[1..40000] of char;
и есть процедура
procedure myProc(var Arr: array of char; var BytesRecieved);
Задача - чтоб после выполнения процедуры буфер был заполнен. Проблема: процедура вызывается из библиотеки(нет возможности ковырять) и записывает от 38000 до 42000 байт. Буфер тоже изменять нельзя.
Пока вижу решение в дополнительном буфере на 43k of char, запускать процедуру на него и далее перекидывать излишки в начало и потом записывать в @myAdditionalBuffer[BytesOverflow]. НО: блин, мне не нравится введение переменной в 43кб =(
Может, у кого есть более оптимальная идея?
[код на делфи для удобства, мне абстрактное описание действий нужно]
UPD [решено] в FormCreate в поток забивается 40000 нулей, каждые 5 сек чистится+остаток пишется в начало. Решение не идеальное, но, может, кому пригодится) По крайней мере, оно работает и глюков не наблюдаю.
type MyStream = class
Stream: TMemoryStream;
LastReadPos: integer;
end;
var MStr: MyStream;
Buf: array[1..40000] of char;
AddBuf: array[1..42000] of char;
[...]
myProc(AddBuf, BytesRead);
MStr.Stream.Position := MStr.Stream.Size;
MStr.Stream.WriteBuffer(AddBuf[0], BytesRead);
MStr.Stream.Position := MStr.LastReadPos;
MStr.Stream.ReadBuffer(Buf, 40000);
inc(MStr.LastReadPos, 40000);
[...]