ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Помогите с Асинхронным вводом на C++
  #1  
Старый 14.06.2010, 17:36
ShkiperLol
Познающий
Регистрация: 17.04.2010
Сообщений: 38
Провел на форуме:
28500

Репутация: 0
По умолчанию Помогите с Асинхронным вводом на C++

народ помогите пожалуйста раздуплиться а асинхронным вводом на С++.Очень нада!
И не надо посылать меня в гугл,я там уже был,там нет той инфы которая мне нада.
Пытаюсь записать на дискету информацию в файл,но она записуеться синхронно.Что я делаю неправильно?

код:
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE event=CreateEvent(0,false,true,0);
HANDLE fil=CreateFile("a:\\temp.txt",GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING|FILE_FLAG_OVERLAPPED,NULL);
char buf[90000];
OVERLAPPED over;
over.hEvent=event;
strcpy(buf,Form1->Memo1->Text.c_str());
DWORD out;
DWORD err;
DWORD res;
WriteFile(fil,buf,90000,NULL,&over);

}
В MSDN был намек на то что нада менять позицию в offset самому,может в етом проблема?
 
Ответить с цитированием

  #2  
Старый 14.06.2010, 17:47
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

на флешки и флопики насколько помню не дает писать асинхронно. проверь запись большого файла на диск C:\ например.

Тут только создать поток записи вручную вариант прокатит. Хотя может что изменилось за то время, када я этим баловался.
 
Ответить с цитированием

  #3  
Старый 14.06.2010, 17:51
ShkiperLol
Познающий
Регистрация: 17.04.2010
Сообщений: 38
Провел на форуме:
28500

Репутация: 0
По умолчанию

Цитата:
Тут только создать поток записи вручную вариант прокатит
Ето не выход,я хочю разобраться именно с асинхронным вводом-выводом.
Цитата:
на флешки и флопики насколько помню не дает писать асинхронно
Тут вы не правы,асынхронный ввод-вывод какраз и создан для работы с носителями,скорость записи в которых очень медленная.
 
Ответить с цитированием

  #4  
Старый 14.06.2010, 18:01
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

Ну ждемс проверки записи на винч. Если не норм - значит косяк в коде. Если норм - значит тоже самое у меня было.

И да, в коде нету задания смещения в структуре 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};

Последний раз редактировалось Ra$cal; 14.06.2010 в 18:10..
 
Ответить с цитированием

  #5  
Старый 14.06.2010, 18:09
ShkiperLol
Познающий
Регистрация: 17.04.2010
Сообщений: 38
Провел на форуме:
28500

Репутация: 0
По умолчанию

У вас нет случайно куска кода где нужно указывать смещение?
 
Ответить с цитированием

  #6  
Старый 14.06.2010, 18:12
ShkiperLol
Познающий
Регистрация: 17.04.2010
Сообщений: 38
Провел на форуме:
28500

Репутация: 0
По умолчанию

Я так понял что указывать смещеные прийдеться в цикле,но какойже ето тогда будет асинхронный ввод?Цикл то затормозит работу программы.Или я неправ?
 
Ответить с цитированием

  #7  
Старый 14.06.2010, 18:14
ShkiperLol
Познающий
Регистрация: 17.04.2010
Сообщений: 38
Провел на форуме:
28500

Репутация: 0
По умолчанию

Цитата:
Ну а из ошибко еще - структура не проинициализированна нулями. Хотя как себя ведет борланд яхз. Но обычно делают OVERLAPPED over = {0};
В борланде ето не играет абсолютно никакой роли!
 
Ответить с цитированием

  #8  
Старый 14.06.2010, 18:14
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

нет, все коды остались на сгоревшем винче. но все сводилось к циклу типа
Код:
while(leftSize > chunkSize){
    over.offset = curChunkOffset;
    curChunkOffset += chunkSize;
    leftSize  -= chunkSize;

    // запись
Дальше не помню, где указывается объем записываемых данных. Еще важно там было плодить или нет оверлаппинги. Тоже уже не помню.

Программу не затормозит, ибо вызов WriteFile будет асинхронным, то есть цикл дальше будет работать. Когда он передаст системе все куски для записи - он завершится и программы выполнится дальше.
 
Ответить с цитированием

  #9  
Старый 14.06.2010, 18:17
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

О, повезло вам.

https://wasm.ru/forum/viewtopic.php?id=26378 мой топик еще жив.
 
Ответить с цитированием

  #10  
Старый 14.06.2010, 18:30
ShkiperLol
Познающий
Регистрация: 17.04.2010
Сообщений: 38
Провел на форуме:
28500

Репутация: 0
По умолчанию

Спасибо!!!!!!То что нужно!
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Народ!!! Помогите НАМ!!! Помогите покончить с беспределом!!! Monah Чаты 7 24.08.2005 07:06



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ