Операционная система Microsoft Windows 3.1 для программиста -том 3

         

Файлы и обработка сообщений


Так как работа приложений Windows (и самой операционной системы Windows) основана на передаче и обработке сообщений, вся файловая активность приложения также начинается во время обработки какого-либо сообщения. Например, редактор текста загружает редактируемый файл, когда приходит сообщение от строки "Open..." меню "File".

С файлами можно работать по-разному.

Первый способ (используемый программами MS-DOS) заключается в том, чтобы открыть все нужные им файлы в начале работы программы и закрыть их перед завершением работы программы. Если, однако, программа работает с большим количеством файлов, ей может не хватить управляющих блоков DFCB, используемых MS-DOS для каждого открытого файла (см. 1 том "Библиотеки системного программиста", раздел 2.4 "Таблица файлов MS-DOS"). Количество таких блоков определяется оператором "FILES=" в файле config.sys.

Для более экономного использования управляющих блоков DFCB программы могут открывать и закрывать файлы по мере необходимости, сокращая таким образом количество файлов, открытых одновременно. Это второй способ.

Приложения Windows не должны держать файлы открытыми на протяжении всего времени своей работы. Более того, вся обработка файла должна выполнятся во время обработки одного сообщения. То есть обработчик сообщения должен открыть файл, выполнить над ним все нужные операции ввода/вывода, а затем закрыть файл. Есть и еще одно ограничение - необходимо закрыть все файлы перед выводом на экран немодальной или модальной диалоговой панели (в том числе и перед вызовом функции MessageBox).

Смысл этих ограничений заключается в том, что они не позволяют пользователю переключиться на другое приложение, если текущее приложение не закрыло все свои файлы.

Почему нельзя переключаться на другое приложение, не закрыв предварительно все файлы?

Представьте себе, что ваше приложение открыло файл, расположенный на дискете. После этого пользователь переключился на другое приложение, которое также работает с дискетами. Для него потребовалось установить другую дискету и пользователь это сделал. Затем он снова переключился на первое приложение, которое продолжило, например, прерванную операцию записи. Но теперь эта операция будет выполняться с другой дискетой, в результате чего обе дискеты скорее всего придется форматировать.

Поэтому приложения Windows должны придерживаться следующего правила:

Все операции с файлом, такие как открытие файла, чтение/запись и закрытие, должны выполнятся во время обработки одного сообщения. Нельзя открывать файл в обработчике одного сообщения и закрывать его в обработчике другого сообщения.



Содержание раздела