|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.12.2011, 17:39 | #11 | |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
> Вы не до конца понимаете работы этого механизма
вполне возможно, т.к. механизм сложный. > окончание работы записи в файл мне асинхронно сообщается по olp.hEvent в мсдн сказано, что olp.hEvent не используется. Я склонен верить мсдн. Ждать можно любое событие. > Я могу не пользоваться колбэком, если в этом нет необходимости не уверен. Пользуйтесь тогда WriteFile(), оно точно так же отлично умеет записывать данные асинхронно, без колбэков. > Не используйте кэш это где такое написано? В мсдн сказано, что если вы зачем-то используете FILE_FLAG_NO_BUFFERING, то там куча ограничений. О том, что его надо использовать — нигде ни слова. Я вот не поленился, набросал простой проект (сорри, привычней на дельфи): Код:
Цитата:
UDP: добавил в свой код FILE_FLAG_NO_BUFFERING, и оно начало работать синхронно. Думаю, в этом можеть быть причина.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 28.12.2011 в 17:45. |
|
28.12.2011, 18:22 | #12 | |||
Новичок
Джуниор
Регистрация: 27.12.2011
Сообщений: 9
|
[QOUTE]в мсдн сказано, что olp.hEvent не используется. Я склонен верить мсдн. Ждать можно любое событие.[/QUOTE]
мм, если точнее, это функцией WriteFileEx он не используется, т.е. другими словами мы можем создать в этой переменной Event и быть уверенными что хэндл эвента в этой функции не изменится. Цитата:
Цитата:
Цитата:
1) Вы записываете 30 МБ, это примерно 8мс на дешёвых винтах. 2) Вы используете не достаточные средства для измерений времени: Код:
3) А вот тут чего вы ждёте? Код:
Код:
нужно OL.hEvent приравнять E и ждать с таймаутом 0 (INFINITE), только так получим правильные результаты. |
|||
28.12.2011, 18:25 | #13 |
Новичок
Джуниор
Регистрация: 27.12.2011
Сообщений: 9
|
FILE_FLAG_NO_BUFFERING - увеличивает время записи в файл, потому что буферизации нет. Вам кажется что начало работать синхронно, действительно же увеличилось время записи.
|
28.12.2011, 18:42 | #14 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
> мы можем создать в этой переменной Event и быть уверенными что хэндл эвента в этой функции не изменится.
с этим согласен. > Вы записываете 30 МБ, это примерно 8мс на дешёвых винтах. ну вот такой у меня медленный винт ) Больше 32 мб за раз оно не пишет, кстати. Возвращает ERROR_NO_SYSTEM_RESOURCES(1450). > Помоему это обёрнутое использование GetTickCount() нет, но это не важно. > А вот тут чего вы ждёте? это совершенно не важно, главное, что поток ушёл в alertable wait state. > Собственно после выхода по таймауту у вас вызывается колбэк нет. Коллбек вызывается во время ожидания, а не после. > непонятно какое время t2 очень даже понятно — время, прошедшее от вызова WriteFileEx() до попадания в колбэк, т.е. то время, которое потребовалось WriteFileEx() для завершения записи. > нужно OL.hEvent приравнять E нафига? > ждать с таймаутом 0 (INFINITE), только так получим правильные результаты. ну ждал я с INFINITE, результат тот же, естсетвенно. > действительно же увеличилось время записи ерунда, время записи всегда примерно 450 мс. Вот только без FILE_FLAG_NO_BUFFERING WriteFileEx() возвращает управление через 15 мс, а с ним через 450 мс.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
28.12.2011, 18:55 | #15 |
Новичок
Джуниор
Регистрация: 27.12.2011
Сообщений: 9
|
Вот мой код, по аналогии с вашим:
Код:
Request time: 400.00ms Write time: 0.02ms а в чём разница, мне не понятно. Может быть вы мне вышлите скомпилированный экзешничек, а я ваш код попробую у себя запустить? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не выполняется макрос | allichka | Microsoft Office Excel | 5 | 19.05.2011 14:47 |
не выполняется условие | Link12 | Общие вопросы C/C++ | 6 | 30.03.2010 19:36 |
Странное поведение WriteFile / WriteFileEx (асинхронный I/O) | besserebrenik | Win Api | 0 | 22.02.2010 20:37 |
Компилируется,но не выполняется. | Lunex.08 | C++ Builder | 6 | 19.11.2009 12:17 |