![]() |
Помогите с Асинхронным вводом на C++
народ помогите пожалуйста раздуплиться а асинхронным вводом на С++.Очень нада!
И не надо посылать меня в гугл,я там уже был,там нет той инфы которая мне нада. Пытаюсь записать на дискету информацию в файл,но она записуеться синхронно.Что я делаю неправильно? код: Код:
void __fastcall TForm1::Button1Click(TObject *Sender) |
на флешки и флопики насколько помню не дает писать асинхронно. проверь запись большого файла на диск C:\ например.
Тут только создать поток записи вручную вариант прокатит. Хотя может что изменилось за то время, када я этим баловался. |
Цитата:
Цитата:
|
Ну ждемс проверки записи на винч. Если не норм - значит косяк в коде. Если норм - значит тоже самое у меня было.
И да, в коде нету задания смещения в структуре overlapped. Насколько помню должна быть. This member is nonzero only when performing I/O requests on a seeking device that supports the concept of an offset (also referred to as a file pointer mechanism), such as a file. Otherwise, this member must be zero. А вот то, о чем я говорил. Я делал программу которая пишет большой файл в 20 кусков, т.е. если 20 метров файл, то я 20 раз стартую запись по метру, меняя смещение этого куска. На флешках такое не прокатывало. Точнее на моей старой флешке. Ну а из ошибко еще - структура не проинициализированна нулями. Хотя как себя ведет борланд яхз. Но обычно делают OVERLAPPED over = {0}; |
У вас нет случайно куска кода где нужно указывать смещение?
|
Я так понял что указывать смещеные прийдеться в цикле,но какойже ето тогда будет асинхронный ввод?Цикл то затормозит работу программы.Или я неправ?
|
Цитата:
|
нет, все коды остались на сгоревшем винче. но все сводилось к циклу типа
Код:
while(leftSize > chunkSize){Программу не затормозит, ибо вызов WriteFile будет асинхронным, то есть цикл дальше будет работать. Когда он передаст системе все куски для записи - он завершится и программы выполнится дальше. |
О, повезло вам.
https://wasm.ru/forum/viewtopic.php?id=26378 мой топик еще жив. |
Спасибо!!!!!!То что нужно!
|
И всетаки с флопиком не работает.А жаль,тогда я больше не вижу надобности применения етой технологии кроме как при записи в файл по сети,или через синий зуб....
|
Что именно не работает? Блочится поток? Делай запись в отдельном потоке.
|
Цитата:
|
Это и называется блокировка потока. Значит делай CreateThread, и запись уже там.
|
Цитата:
|
Цитата:
Цитата:
вот в етой статье,на делфях правда,в примере какраз используеться асинхронный вывод на флопик. http://pblog.ru/?p=74 |
ну я говорю, проверь запись на жесткий диск. если асинхронно - значит ограничения такие. Вероятнее всего трабла из-за той цитаты что я привел. Для записи в асинхронке требуется указать в оверлаппед смещение, куда пишешь. Там же сказано что не все девайсы поддерживают такое.
|
| Время: 17:46 |