Если просто читать без потока , кода работает на обоих платформах
begin
ifThreadFile.BytesReady<=ThreadFile.Counter then
begin
BlockRead(FileByte,ThreadFile.Buf1,Len[4]);ThreadFile.Counter:=0;ThreadFile.BytesReady:=Len[4];
end;Move(ThreadFile.Buf1[ThreadFile.Counter],GetHidBufPointer^,Len[3]);ThreadFile.Counter:=ThreadFile.Counter+Len[3];
end;
Если использовать потоки
begin
if ThreadFile.BytesReady=0 then
begin
BlockRead(FileByte,ThreadFile.Buf1,Len[4]);
ThreadFile.BackBuf := False;
ThreadFile.BytesReady := Len[4];
ThreadFile.Resume;
end;
if ThreadFile.Counter=ThreadFile.BytesReady then
begin
ThreadFile.Counter := 0;
ThreadFile.BytesReady :=0;
ThreadFile.BackBuf := not ThreadFile.BackBuf;
ThreadFile.Resume;
end;
if ThreadFile.BackBuf then Move(ThreadFile.Buf2[ThreadFile.Counter],GetHidBufPointer^,Len[3])
else Move(ThreadFile.Buf1[ThreadFile.Counter],GetHidBufPointer^,Len[3]);
ThreadFile.Counter := ThreadFile.Counter + Len[3];
end;
//-------------
procedure TThreadFile.Execute;
begin
inherited;
while True do
begin
if BackBuf then BlockRead(FileByte,Buf1,Len[4])
else BlockRead(FileByte,Buf2,Len[4]);
BytesReady := BytesReady + Len[4];
Suspend;
// Self.
end;
end;
То в этом случае всё работает только в fmx в версии win32 . В Андройде , увы читаются нули.
В принципе ошибка не критичная, т.к. второй вариант в итоге не даёт приросто производительности, но в общей случае настораживает.
Вопрос
Андрей Рулин
Очередная "чуча" от fmx(Delphi 10 Seattle)
Если просто читать без потока , кода работает на обоих платформах
Если использовать потоки
begin if ThreadFile.BytesReady=0 then begin BlockRead(FileByte,ThreadFile.Buf1,Len[4]); ThreadFile.BackBuf := False; ThreadFile.BytesReady := Len[4]; ThreadFile.Resume; end; if ThreadFile.Counter=ThreadFile.BytesReady then begin ThreadFile.Counter := 0; ThreadFile.BytesReady :=0; ThreadFile.BackBuf := not ThreadFile.BackBuf; ThreadFile.Resume; end; if ThreadFile.BackBuf then Move(ThreadFile.Buf2[ThreadFile.Counter],GetHidBufPointer^,Len[3]) else Move(ThreadFile.Buf1[ThreadFile.Counter],GetHidBufPointer^,Len[3]); ThreadFile.Counter := ThreadFile.Counter + Len[3]; end; //------------- procedure TThreadFile.Execute; begin inherited; while True do begin if BackBuf then BlockRead(FileByte,Buf1,Len[4]) else BlockRead(FileByte,Buf2,Len[4]); BytesReady := BytesReady + Len[4]; Suspend; // Self. end; end;
То в этом случае всё работает только в fmx в версии win32 . В Андройде , увы читаются нули.
В принципе ошибка не критичная, т.к. второй вариант в итоге не даёт приросто производительности, но в общей случае настораживает.
Ссылка на комментарий
6 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.