Разбираюсь с примером, но даже его скомпилировать не могу из-за того вылазит ошибка
HANDLE h: переопределение
#undef UNICODE
#include "stdafx.h"
#include <tchar.h>
#include <stdio.h>
//#include <strsafe.h>
#include <iostream>
#include <windows.h>
using namespace std;
HANDLE hCompletionPort;
DWORD WINAPI thread(LPVOID)
{
int i = 0;
DWORD dwNumberOfBytes;
ULONG ulCompletionKey;
LPOVERLAPPED lpOverlapped;
cout << "The thread is started." << endl;
while (GetQueuedCompletionStatus(
hCompletionPort,
&dwNumberOfBytes,
&ulCompletionKey,
&lpOverlapped,
INFINITE))
if (ulCompletionKey == 0)
{
cout << endl << "The thread is finished." << endl;
break;
}
else
cout << "\tPacket: " << ++i << endl
<< "Number of bytes: " << dwNumberOfBytes << endl
<< "Completion key: " << ulCompletionKey << endl;
return 0;
}
int main(int argc, char* argv[])
{
HANDLE h;
OVERLAPPED ovl;
ULONG ulKey;
HANDLE hThread;
DWORD dwThreadID;
ovl.Offset = 0;
ovl.OffsetHigh = 0;
ovl.hEvent = 0;
cout << "Input a number for file key (not zero): ";
cin >> ulKey;
if (ulKey == 0)
{
cout << "The file key can't be equal to zero." << endl
<< "Press any key to exit." << endl;
return 0;
}
HANDLE h = CreateFileA("file.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (h == INVALID_HANDLE_VALUE)
{
cerr << "Create file failed." << endl
<< "The last error code: " << GetLastError() << endl;
cout << "Press any key to finish." << endl;
cin.get();
return 0;
}
hCompletionPort = CreateIoCompletionPort(
h,
NULL,
ulKey,
1
);
if (hCompletionPort == NULL)
{
cerr << "Create completion port failed." << endl
<< "The last error code: " << GetLastError() << endl;
cout << "Press any key to finish." << endl;
cin.get();
return 0;
}
hThread = CreateThread(NULL, 0, thread, NULL, 0, &dwThreadID);
for (int i = 0; i < 10; ++i)
{
DWORD dwBytesWrite;
DWORD dwRet;
if (!WriteFile(
h,
&i,
sizeof(i),
&dwBytesWrite,
&ovl
))
{
dwRet = GetLastError();
if (dwRet == ERROR_IO_PENDING)
cout << "Write file pending." << endl;
else
{
cout << "Write file failed." << endl
<< "The last error code: " << dwRet << endl;
return 0;
}
}
WaitForSingleObject(h, INFINITE);
ovl.Offset += sizeof(i);
}
PostQueuedCompletionStatus(
hCompletionPort,
0,
0,
NULL);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(h);
CloseHandle(hCompletionPort);
CloseHandle(hThread);
cout << "The file is written." << endl;
return 0;
}
Вы уж или уберите это:
HANDLE h;
или HANDLE
здесь:
HANDLE h = CreateFileA("file.txt", ...
А то вы два раза объявляете одну и ту же переменную...
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Пишу универсальный тип данных(мини-версию) Проблема возникла при вызове getInside();
Написал некий фрагмент кода (вообще пишу решение СЛАУ методом Гаусса), при данных значениях а и b, когда k >= 2 возникает ошибка -nan(ind) и nan (когда...
Задача написать функцию на С++,переводящую число X из 10 системы счисления в 3