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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2017, 15:57   #1
Maray
Форумчанин
 
Регистрация: 03.01.2015
Сообщений: 160
Восклицание Ассинхроная операция

Добрый день!

Помогите, пожалуйста. Нужно сделать ассинхроную операцию ввода/вывода. Делала так, но сказали, что так не будет работать. Как то нужно сделать используя OnIdle. Помогите, пожалуйста

Код:
void WriteBytes(HANDLE File, HWND Edit){
    int cch = GetWindowTextLengthA(Edit) + 1;
    char* buffer = (char*)GlobalAlloc(GPTR, cch * sizeof(char));
    GetWindowTextA(Edit, buffer, cch);
    OVERLAPPED ovlp = { sizeof(OVERLAPPED) };
    ovlp.Offset = 0;
    ovlp.OffsetHigh = 0;
    ovlp.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
    WriteFile(File, buffer, (cch-1)*sizeof(char), NULL, &ovlp);
    
    WaitForSingleObject(ovlp.hEvent, INFINITE);
    CloseHandle(ovlp.hEvent);
    LARGE_INTEGER lia = { sizeof(LARGE_INTEGER) };
    lia.LowPart = cch*sizeof(char);
    SetFilePointerEx(File, lia, NULL, FILE_BEGIN);
    SetEndOfFile(File);
    FlushFileBuffers(File);
    GlobalFree(buffer);
}
 
void ReadBytes(HANDLE File, HWND hEdit, LARGE_INTEGER FS){
    SetDlgItemText(mainWnd, IDC_TEXTBOX, L"");
    DWORD readBy = FS.LowPart;
    const int charSize = sizeof(char);
    char* buffer = (char*)GlobalAlloc(GPTR, readBy + 1);
    if (!buffer) return;
    OVERLAPPED ovlp = { sizeof(OVERLAPPED) };
    ovlp.Offset = 0;
    ovlp.OffsetHigh = 0;
    ovlp.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
    DWORD read = 0;
    ReadFile(File, (LPVOID)buffer, readBy, &read, &ovlp);
    read = ovlp.InternalHigh;
 
    WaitForSingleObject(ovlp.hEvent, INFINITE);
    AppendEditText(buffer, hEdit);
 
    CloseHandle(ovlp.hEvent);
 
}
Maray вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
операция с файлами Иришка1 Паскаль, Turbo Pascal, PascalABC.NET 3 02.06.2012 08:24
операция деления genia Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 09.03.2011 06:02
Операция с panel grafgrial Общие вопросы Delphi 7 31.03.2010 20:35
Операция Ы SASHA50 Microsoft Office Excel 10 25.04.2008 12:38
Операция сдвига? SkyDreamer Общие вопросы C/C++ 3 10.10.2007 08:20