Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как явно вызвать механизм APC 
:(
    Опции темы
AlekXL
Дата 14.6.2013, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 2.5.2008

Репутация: нет
Всего: 0



у меня есть код, вызывающий ReadFileEx с параметром FileIOCompletetion, который указателем на функцию. 
Порой немедленный вызов GetOverlappedResult возвращает TRUE, тем самым показывая, что буфер записан, однако возвращаемое значение lpNumberOfBytesTransferred иногда при этом оказывается нулевым.
Единственный способ получить корректный размер(я думаю) записанных данных - это войти в Alertable State и дождаться, когда будет вызван callback FileIOCompletetion 

Как это сделать? Приходит на ум SleepEx(n,TRUE), но как я понимаю если первый параметр будет нулевым, то поток пропустит весь свой таймслайс, а если больше - потратится время на вход и выход в Kernel Mode.
Мне нужна функция, которая вынудит систему вызвать все запланированные коллбэки(которых может быть 0 или больше), и немедленно вернуть управление к точке вызова.

PM MAIL   Вверх
Illusion Dolphin
Дата 14.6.2013, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 4
Всего: 63



Цитата

возвращает TRUE, тем самым показывая, что буфер записан, однако возвращаемое значение lpNumberOfBytesTransferred иногда при этом оказывается нулевым.

Тут есть несколько вариантов. Он может быть успешно прочитал 0 байтов smile А может быть неверно заполнены поля в LPOVERLAPPED и тогда может быть:
Цитата

If the hEvent member of the OVERLAPPED structure is NULL, the system uses the state of the hFile handle to signal when the operation has been completed. Use of file, named pipe, or communications-device handles for this purpose is discouraged. It is safer to use an event object because of the confusion that can occur when multiple simultaneous overlapped operations are performed on the same file, named pipe, or communications device. In this situation, there is no way to know which operation caused the object's state to be signaled.

А т.к. кода нету то и не понятно, что происходит. В любом случае надо разобраться с тем, что не так, а не городить SleepEx и тому подобное, имхо.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
bems
Дата 20.6.2013, 03:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Цитата(AlekXL @  14.6.2013,  15:46 Найти цитируемый пост)
Приходит на ум SleepEx(n,TRUE), но как я понимаю если первый параметр будет нулевым, то поток пропустит весь свой таймслайс, а если больше - потратится время на вход и выход в Kernel Mode.
тревожное ожидание это всегда кернелмод, так что тут не сэкономить



--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1066 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.