Мегаобучалка Главная | О нас | Обратная связь


Демонстрационный пример



2016-01-02 410 Обсуждений (0)
Демонстрационный пример 0.00 из 5.00 0 оценок




HINSTANCE hinst;HWND hwndMain;// Создание основного окна.hwndMain= CreateWindowEx(0, // расширения стилей нет"MainWClass", // имя класса"Основное окно", // имя окнаWS_OVERLAPPEDWINDOW |// перекрывающее окноWS_HSCROLL |// горизонтальная линейка прокруткиWS_VSCROLL,// вертикальная линейка прокруткиCW_USEDEFAULT,// горизонтальная позиция по умолчаниюCW_USEDEFAULT,// вертикальная позиция по умолчаниюCW_USEDEFAULT,// ширина по умолчаниюCW_USEDEFAULT,// высота по умолчанию(HWND) NULL,// окно не родительское или//имеющее в собственности окна (HMENU) NULL,//используемый класс менюhinstance,//дескриптор экземпляраNULL);//нет данных создания окнаif (!hwndMain)return FALSE;//Показывает окно, использующее флажок, определенный программой,//которая запускает прикладную программу и отправляет в приложение//сообщение WM_PAINT.ShowWindow(hwndMain, SW_SHOWDEFAULT);UpdateWindow(hwndMain);

 

2. Дополнительные сблокированные функции.

Далее приведено еще несколько функций, которые позволяют выполнять

элементарные операции для сравнения и обмена пар переменных.

Сблокированный обмен записывает одну переменную в другую:

LONG InterlockedExchange ( LPLONG Target, LONG Value)

Функция возвращает текущее значение переменной Target и присваивает

ей значение Value. Переменная Target должна выравниваться по словам.

Функция InterlockedExchangeAdd добавляет к первому значению

второе.

LONG InterlockedExchangeAdd ( PLONG Addend, LONG Increment)

Переменная Increment прибавляется к переменной Addend, и

возвращается исходное значение Addend. Эта функция позволяет выполнить

атомарную операцию увеличения переменной на 2 (или большее число), что

невозможно сделать последовательными вызовами функции

InterlockedIncrement. Последняя функция, InterlockedCompareExchange, аналогична функции InterlockedExchange, за исключением того, что обмен возможен только в том случае, если равенство выполняется.

PVOID InterlockedCompareExchange (PVOID *Destination,

PVOID Exchange, PVOID Comparand)

Эта функция выполняет в атомарной операции следующие действия

(причина использования типа pvoid для двух последних параметров непонятна):

Temp = *Destination;

if (*Destination == Comparand) *Destination = Exchange;

return Temp;

Одно из применений этой функции — блокировка для реализации

критической секции кода. Переменная *Destination является "переменной

блокировки", для которой 1 значит "разблокировано", а 0 — "заблокировано".

Переменная Exchange должна иметь значение 0, a Comparand — значение 1.

Вызвавший функцию поток получает во "владение" критическую секцию, если

функция возвращает значение 1. Иначе он должен "заснуть" или "зациклиться"

— выполнять бесполезный цикл некоторое время, а затем попробовать снова.

Это зацикливание — именно то, что делает функция EnterCriticalSection во

время ожидания для объекта CRITICAL_SECTION с ненулевым значением

счетчика цикла.

 

3. Стандартные устройства и консольный ввод-вывод.

Win32 имеет три стандартных устройства для ввода, вывода и сообщения об

ошибках. Имеется функция для получения дескрипторов стандартных

устройств.

HANDLE GetStdHandle (DWORD nStdHandle)

Возвращаемое значение: допустимый дескриптор, если функция завершается

успешно; иначе INVALID_HANDLE_VALUE.

Параметр GetStdHandle nStdHandle должен иметь одно из следующих

значений:

- STD_INPUT_HANDLE;

- STD_OUTPUT_HANDLE;

- STD_ERROR_HANDLE.

Стандартные устройства обычно назначены консоли и клавиатуре.

Стандартный ввод-вывод можно перенаправлять.

GetStdHandle не создает новый дескриптор стандартного устройства и не

дублирует прежний. Последовательные вызовы с одним и тем же параметром

возвращают одно и то же значение дескриптора. Закрытие дескриптора

стандартного устройства делает это устройства недоступным для

последующего использования. Поэтому примеры программ часто открывают

стандартное устройства, работают с ним, но не закрывают.

BOOL SetStdHandle (DWORD nStdHandle, HANDLE hHandle)

Возвращаемое значение: TRUE или FALSE, в зависимости от успеха или

неудачи.

Параметры SetStdHandle. Возможное значение nStdHandle – те же, что и в

GetStdHandle. Параметр hHandle определяет открытый файл, который

должен быть стандартным устройством.

Обычно метод перенаправления стандартного ввода-вывода в пределах

процесса состоит в том, чтобы использовать последовательность SetStdHandle

и GetStdHandle. Полученный в результате дескриптор используется в

последующих операциях ввода-вывода.

Два имени файлов зарезервированы для консольного ввода (с клавиатуры) и

консольного вывода: CONINS и CONOUTS. Консоль можно использовать

независимо от любого перенаправления этих стандартных устройств; для этого

нужно просто открыть дескрипторы CONINS или CONOUTS с помощью

CreateFile.

Для консольного ввода-вывода можно применить ReadFile и WriteFile, но

лучше использовать специальные функции ReadConsole и WriteConsole.

Основные их преимущества состоят в том, что эти функции обрабатывают

универсальные символы (TCHAR), а не байты, а также учитывают режим

консоли, установленный функцией SetConsoleMode.

BOOL SetConsoleMode (HANDLE hConsole, DWORD fdevMode)

Возвращаемое значение: TRUE, если функция завершается успешно.

Параметры SetConsoleMode.

nConsole идентифицирует буфер ввода или экрана, который должен иметь

атрибут доступа GENERIC_WRITE, даже если соответствующее устройство

допускает только ввод.

fdevMode определяет режим обработки символов. Значение каждого флага

указывает, применяется ли этот флаг к консольному вводу или к выводу. При

создании буфера установлены все флаги, кроме ENABLE_WINDOW_INPUT.

- ENABLE_LINE_INPUT функция чтения (ReadConsole) завершается, когда

встречается символ возврата каретки.

- ENABLE_ECHO_INPUT читаемые символы дублируются на экране.

- ENABLE_PROCESSED_INPUT система обрабатывает символы возврата

(backspace), возврата каретки и перевода строки.

- ENABLE_ PROCESSED _OUTPUT система обрабатывает символы

возврата (backspace), табуляции, звукового сигнала, возврата каретки и

перевода строки.

- ENABLE_WRAP_AT_EOL_OUTPUT разрешается перенос строк как при

обычном, так и при дублированном выводе.

Если функция SetConsoleMode терпит неудачу, режим не изменяется и

возвращается значение FALSE. Код ошибки, как обычно, возвращает

GetLastError.

Функции ReadConsole и WriteConsole подобны ReadFile и WriteFile.

BOOL ReadConsole (HANDLE hConsoleInput, LPVOID lpvBuffer,

DWORD cchToRead, LPDWORD lpcchRead,

LPVOID lpvReserved)

Возвращаемое значение: TRUE, если функция завершается успешно.

Параметры функции почти такие же, как в ReadFile. Два параметра

выражаются в универсальных символах, а не в байтах, а lpvReserved должен

иметь значение NULL.

Процесс может иметь только одну консоль. Консоль бывает необходима во

многих случаях, например при разработке сервера или приложения GUI, чтобы

отображать состояние или отладочную информацию. Для этого предназначены

две простые функции без параметров.

BOOL FreeConsole (VOID)

BOOL AllocConsole (VOID)

FreeConsole отделяет процесс от его консоли. AllocConsole создает

новую консоль, связанную со стандартным вводом, выводом и выдачей ошибок

процесса. AllocConsole завершается неудачно, если процесс уже имеет

консоль; чтобы избежать этой проблемы, поместите перед этой функцией вызов

FreeConsole.

 



2016-01-02 410 Обсуждений (0)
Демонстрационный пример 0.00 из 5.00 0 оценок









Обсуждение в статье: Демонстрационный пример

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (410)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.005 сек.)