Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Func.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.58 Mб
Скачать

MmioStringToFourcc

FOURCC mmioStringToFOURCC( LPCSTR sz, UINT wFlags );

Возвращаемое значение

Возвращает четырёхбуквенный код, созданный из переданной данной функции строки.

Аргументы

  1. sz — указатель на заканчивающуюся нулём строку, преобразуемую в четырёхбуквенный код.

  2. wFlags — флаги преобразования. Определены следующие значения:

  • MMIO_TOUPPER — преобразовать все символы в верхний регистр.

Примечание

Функция mmioStringToFOURCC преобразует заканчивающуюся нулём строку в четырёхбуквенный код.

Функция копирует строку в 32-битовую переменную, заполняя её справа символами пробела или обрезая её до четырёх символов, в зависимости от длины передаваемой строки. Функция не проверяет корректности содержимого передаваемой строки.

Описание данной функции содержится в файле заголовка mmsystem.h. При работе с данной функцией следует включить в проект библиотеку winmm.lib.

MmioWrite

LONG mmioWrite( HMMIO hmmio, char _huge* pch, LONG cch );

Возвращаемое значение

Возвращается число реально записанных байт. Если при выполнении функции возникла ошибка, то возвращается значение -1.

Аргументы

  1. hmmio — дескриптор записываемого файла.

  2. pch — указатель на буфер, содержащий записываемую в файл информацию.

  3. cch — число байт, которые следует записать в файл.

Примечание

Функция mmioWrite записывает указанное число байт в файл, открытый функцией mmioOpen.

Текущая позиция в файле увеличивается на записанное число байт.

Описание данной функции содержится в файле заголовка mmsystem.h. При работе с данной функцией следует включить в проект библиотеку winmm.lib.

MsgWaitForMultipleObjects

DWORD MsgWaitForMultipleObjects( DWORD nCount, LPHANDLE pHandles, BOOL fWaitAll, DWORD dwMilliseconds, DWORD dwWakeMask );

Возвращаемое значение

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

  • от WAIT_OBJECT_0 до (WAIT_OBJECT_0 + nCount – 1) — если аргумент fWaitAll имеет значение TRUE, возвращаемое определяет, что все указанные события были отмечены. Если аргумент fWaitAll имеет значение FALSE, возвращаемое значение за вычетом величины WAIT_OBJECT_0 соответствует индексу отмеченного объекта в массиве pHandles.

  • WAIT_OBJECT_0 + nCount — во входной очереди потока появился новый объект типа, указанного в аргументе dwWakeMask. Такие функции, как PeekMessage, GetMessage и WaitMessage маркируют сообщения в очереди как старые сообщения. Поэтому при вызове функции MsgWaitForMultipleObjects после вызова этих функций она не возвратит управление до тех пор, пока не будет получено новое сообщение указанного типа. Это значение может быть также возвращено при возникновении системного события, требующего вмешательства данного потока. Поэтому функция MsgWaitForMultipleObjects может возвращать управление и в том случае, если не поступило ни одного из указанных сообщений и, даже в том случае, когда аргумент dwWaitMask имеет нулевое значение. В этом случае перед последующим вызовом функции MsgWaitForMultipleObjects следует вызвать функцию PeekMessage или GetMessage для обработки системных событий.

  • от WAIT_ABANDONED_0 до (WAIT_ABANDONED_0 + nCount – 1) — если аргумент fWaitAll имеет значение TRUE, возвращаемое определяет, что все указанные события были отмечены и, что, по крайней мере, один из них, являлся покинутым объектом mutex. Если аргумент fWaitAll имеет значение FALSE, возвращаемое значение за вычетом величины WAIT_OBJECT_0 соответствует индексу покинутого объекта mutex в массиве pHandles.

  • WAIT_TIMEOUT — истёк интервал ожидания, но условия, поставленные в аргументах fWaitAll и dwWakeMask, не были выполнены.

В случае аварийного завершения работы функции возвращается значение 0xFFFFFFFF. Для получения расширенной информации об ошибке вызовите функцию GetLastError.

Аргументы

  1. nCount — определяет число дескрипторов объектов, содержащихся в массиве pHandles. Максимальное число дескрипторов объектов в данном массиве на единицу меньше величины MAXIMUM_WAIT_OBJECTS.

  2. pHandles — указатель на массив дескрипторов объектов. В данном массиве могут содержаться дескрипторы следующих объектов:

  • извещения об изменениях;

  • ввод с системной консоли;

  • события;

  • задания;

  • объекты mutex;

  • процессы;

  • семафоры;

  • потоки;

  • таймеры ожидания;

  1. В Windows NT дескрипторы должны иметь право доступа SYNCHRONIZE.

  2. В Windows 95 ни один из дескрипторов объектов не может быть копией другого дескриптора объекта, полученной с использованием функции DuplicateHandle.

  3. fWaitAll — определяет режим ожидания. Если этот аргумент имеет значение TRUE, функция возвращает управление только после того, как будут отмечены все объекты, дескрипторы которых помещены в массив pHandles, включая события ввода информации. Если этот аргумент имеет значение FALSE, функция возвращает управление после того, как будет отмечен хотя бы один из этих объектов. В последнем случае возвращаемое значение указывает на объект, прервавший выполнение функции.

  4. dwMilliseconds — определяет интервал ожидания в миллисекундах. Функция возвращает управление по истечении данного интервала даже в том случае, если не произошло событие, определённое в аргументах fWaitAll и dwWakeMask. Если аргумент dwMilliseconds имеет нулевое значение, функция поверяет состояние указанных объектов и немедленно возвращает управление. Для задания бесконечного интервала ожидания используется значение INFINITE.

  5. dwWakeMask — определяет типы сообщений, дескрипторы объектов которых добавляются в массив дескрипторов объектов. В данном аргументе могут быть установлены следующие флаги:

  • QS_ALLEVENTS — в очереди входные сообщения, посланные сообщения и сообщения WM_TIMER, WM_PAINT или WM_HOTKEY.

  • QS_ALLINPUT — любое сообщение в очереди.

  • QS_ALLPOSTMESSAGE — в очереди посланное сообщение (кроме перечисленных в этом списке).

  • QS_HOTKEY — в очереди сообщение WM_HOTKEY.

  • QS_INPUT — в очереди входное сообщение.

  • QS_KEY — в очереди сообщение WM_KEYUP, WM_KEYDOWN, WM_SYSKEYUP или WM_SYSKEYDOWN.

  • QS_MOUSE — в очереди сообщение WM_MOUSEMOVE или одно из сообщений о состоянии кнопок мыши (WM_LBUTTONUP, WM_RBUTTONDOWN и т.п.).

  • QS_MOUSEBUTTON — в очереди одно из сообщений о состоянии кнопок мыши (WM_LBUTTONUP, WM_RBUTTONDOWN и т.п.).

  • QS_MOUSEMOVE — в очереди сообщение WM_MOUSEMOVE.

  • QS_PAINT — в очереди сообщение WM_PAINT.

  • QS_POSTMESSAGE — в очереди посланное сообщение (кроме перечисленных в этом списке).

  • QS_SENDMESSAGE — в очереди сообщение, посланное другим потоком или приложением.

  • QS_TIMER — в очереди сообщение WM_TIMER.

Примечание

Функция MsgWaitForMultipleObjects возвращает управление в одном из двух случаев:

  • Отмечен один или все из указанных объектов. Эти объекты могут включать в себя объекты входных событий, определяемые в аргументе dwWakeMask.

  • Истёк интервал ожидания.

Функция MsgWaitForMultipleObjects не возвращает управления в том случае, если в очереди сообщений есть необработанное сообщение указанного типа и поток вызвал функцию проверки состояния очереди. Это происходит потому, что функции PeekMessage, GetMessage, GetQuequeStatus и WaitMessage не только проверяют состояние очереди, но и помечают все сообщения в ней как старые. При последующем вызове функция MsgWaitForMultipleObjects не возвратит управление до тех пор, пока в очереди не появится навое сообщение указанного типа. При этом непрочитанное сообщение (полученное до последней проверки состояния очереди) игнорируется.

Функция MsgWaitForMultipleObjects определяет момент наступления ожидаемого события. До этого момента вызывающий поток переводится в состояние ожидания, практически не используя процессорное время.

Если аргумент fWaitAll данной функции имеет значение TRUE, функция не модифицирует состояния указанных объектов до тех пор, пока все они не будут отмечены. Например, объект mutex может быть отмечен, но поток не получит его в свою собственность, пока не будут отмечены остальные объекты. Тем временем какой-нибудь другой поток может получить в собственность объект mutex, сбросив тем самым его отметку.

Когда аргумент fWaitAll имеет значение TRUE, ожидание завершается только тогда, когда будут отмечены все объекты, включая объекты входных событий, определённые в аргументе dwWaskMask. Таким образом передача в аргументе fWaitAll значения TRUE препятствует обработке входного сообщения до тех пор, пока не будут отмечены все объекты в массиве pHandles. Поэтому при передаче в аргументе fWaitAll значения TRUE необходимо установить короткий период ожидания в аргументе dwMilliseconds. Наличие в системе потока, создающего окно, ожидающее отметки всех событий в массиве pHandles, включая входные события, определённые в аргументе dwWakeMask, с бесконечным временем ожидания, может привести к зависанию системы. Это связано с тем, что потоки, создающие окна, должны обрабатывать сообщения. DDE посылает сообщения всем окнам системы. Поэтому нельзя передавать значение TRUE аргумент fWaitAll функции MsgWaitForMultipleObjects, вызываемой в потоках, создающих окна.

Перед завершением своей работы данная функция модифицирует состояние некоторых типов объектов синхронизации. Модификации подвергается только тот объект или те объекты, отметка которых привела к завершению работы функции. Например, счётчик семафора уменьшается на единицу. Если аргумент fWaitAll имеет значение FALSE и было отмечено несколько объектов, функция выбирает один из них как причину завершения своей работы. Состояния остальных объектов не изменяются.

Флаги QS_ALLPOSTMESSAGE и QS_POSTMESSAGE различаются моментом сброса. Флаг QS_POSTMESSAGE сбрасывается при вызове функции GetMessage или PeekMessage независимо от того, использовалась ли при этом фильтрация сообщений. Флаг QS_ALLPOSTMESSAGE сбрасывается при вызове функции GetMessage или PeekMessage без фильтрации (аргументы wMsgFilterMin и wMsgFilterMax имеют нулевое значение). Это может быть полезным при многократном вызове функции PeekMessage для обработки различных диапазонов сообщений.

Описание данной функции содержится в файле заголовка winuser.h. При работе с данной функцией следует включить в проект библиотеку user32.lib.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]