Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2010, 20:37   #1
besserebrenik
 
Регистрация: 23.03.2009
Сообщений: 6
По умолчанию Странное поведение WriteFile / WriteFileEx (асинхронный I/O)

Столкнулся со странным поведением функций вин апи WriteFile / WriteFileEx. При первом их вызове, поток останавливается и ждет их завершения (при этом запись в файл происходит нормально). При повторном вызове ее с такими же параметрами работает уже нормально - поток работает дальше.

PHP код:
const 
FLOPP_S1024 1024 15;  // длинна буфера 
var
  
arr:array[1..FLOPP_Sof byte

procedure EndWrite(dwErrorCode:DWORDdwNumberOfBytesTransfered:DWORDlpOverlapped:POverlapped);stdcall;
begin
 ShowMessage
('Записано байт: '+IntToStr(dwNumberOfBytesTransfered));
end;

procedure TForm1.Button4Click(SenderTObject);
var
  
FileHandle,DestFileHandle:THandle;
  
OverlapTOverlapped;
  
res:BOOL;
  
_WRITED,i,LastError:DWORD;
begin
  FillChar
(Overlap,SizeOf(Overlap),0);
  for 
i:=1 to trunc(FLOPP_S/100) do
   
arr[i*100]:=ord('Q');
  
FileHandle:=CreateFile('K:\file.dat',GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);
  if 
FileHandle=INVALID_HANDLE_VALUE then
   begin
    ShowMessage
('не прет');
    exit;
   
end;
  
Overlap.hEvent:=CreateEvent(0,True,False,0);

  
res:=WriteFileEx(FileHandle,@arr,FLOPP_S,Overlap,@EndWrite);
  
LastError := GetLastError;
  
ShowMessage('ЗАпись началась');
  while 
WaitForSingleObjectEx(Overlap.hEvent,1000,True)=WAIT_TIMEOUT do
   
Application.ProcessMessages ;

  
GetOverlappedResult(FileHandle,Overlap,_WRITED,FALSE);
  
CloseHandle(Overlap.hEvent);
  
CloseHandle(FileHandle);
end
Пример взял из этой интересной статьи.. http://pblog.ru/?p=74
besserebrenik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странное поведение null Vitalyk JavaScript, Ajax 6 13.02.2010 15:22
Странное поведение процедуры Sergey1974 Общие вопросы Delphi 2 11.12.2009 21:41
Странное поведение TTreeView mutabor Компоненты Delphi 1 01.05.2009 05:17
Странное поведение базы yulia БД в Delphi 7 22.04.2009 07:15
Странное поведение ПОИСКПОЗ ZORRO2005 Microsoft Office Excel 5 19.05.2008 14:02