|
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 18
|
||||||
перенести создание файла в основную нерезидентную часть10.12.2010, 10:42. Показов 1176. Ответов 8
Метки нет (Все метки)
Ребята, пожалуйста, окажите помощь.
Написал программу резидeнтную, которая запиcывaет в фaйл то, что на экрaнe. В ДОСБОКСе работает отлично, но под 98 виндой не идет, виснет при создании файла. Сказали, что происходит из-за того, что файл создается и пишется в резидентной части. Как перенести создание файла в основную нерезидентную часть (init)? То есть дескриптор оставить резиденту, чтоб он туда видеостраницу писал. Пробовал, но получается так: файл создается, но в него ничего не пишется и он не закрывается. Вот код рабочей программы:
0
|
||||||
| 10.12.2010, 10:42 | |
|
Ответы с готовыми решениями:
8
Каким образом из файла-ресурса меню должно передаться в основную часть программы? Cтруктура программы. Где пишем основную часть кода? Основную часть кода вынести из класса формы в отдельный класс |
|
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
|
|
| 10.12.2010, 13:42 | |
|
;Особенности резидентных программ
;TSR-программы имеют некоторые особенности, отличающие их от "нормальных" программ. ;Им не разрешается использовать DOS-прерывания, когда вздумается. Это связано с тем, что DOS проектировалась как однозадачная операционная система, поэтому модули DOS не обладают свойством реентерабельности (повторной входимости). Что это означает на практике? ;Допустим, Ваша программа записывает длинный файл на диск. Во время записи вы (возможно, случайно) нажали клавишу, активизирующую TSR-программу записи содержимого экрана в файл. ;Теперь доступа к диску требуют две программы - прикладная, записывающая длинный файл, и Ваша TSR-программа. Запись файла из прикладной программы приостановится, далее произойдет запись копии экрана в файл, после чего возобновится запись файла из прикладной программы. Все было бы хорошо, если бы прикладная программа и TSR-программа не использовали одни и те же внутренние области данных DOS для работы с диском. При запуске TSR-программа безвозвратно испортит текущее состояние служебных областей данных, которые прикладная программа использовала при записи на диск. ;И таких примеров можно привести много. BIOS также далеко не весь реентерабельный. TSR-программа может смело использовать разве лишь прерывание 16h для работы с клавиатурой, которое реентерабельно. Для вывода на экран лучше всего использовать непосредственную запись символов в видеопамять дисплейного адаптера. ;Не стоит пользоваться многими функциями библиотеки Quick C, так как они могут вызывать прерывания DOS. Например, функция malloc() вызывает прерывание DOS для определения размера свободной памяти в системе. ;Могут возникнуть трудности с использованием арифметических действий с числами в формате плавающей запятой, так как функция _dos_keep() при завершении программы восстанавливает прерывания, использовавшиеся для эмуляции арифметики с плавающей запятой и для работы с арифметическим сопроцессором. ;Некоторые из перечисленных проблем (те, что связаны с использованием прерываний DOS) можно решить с помощью недокументированного прерывания INT 28h. ;Это прерывание вызывается DOS при ожидании ввода с клавиатуры. В этот момент вы можете использовать любое прерывание DOS, кроме функций от 00h до 0Сh прерывания INT 21h. Утилита спулинга печати PRINT.COM использует это прерывание. ;Можно рекомендовать следующий способ использования прерывания 28h. Обработчик прерывания 9 отслеживает нажатие клавиши, которая должна активизировать TSR-программу. Обнаружив эту клавишу (или комбинацию клавиш), обработчик прерывания 9 устанавливает флаг запроса на активизацию TSR-программы и завершает свою работу обычным способом. ;Ваша TSR-программа должна создать свой обработчик прерывания 28h и сцепить его со стандартным. Каждый раз, когда DOS ожидает ввода с клавиатуры (в этот момент DOS не использует сама свои прерывания), вызывается прерывание 28h. Ваш обработчик проверяет флаг активизации, устанавливаемый обработчиком прерывания 9, и если флаг установлен, TSR-программа активизируется и может пользоваться услугами DOS, в частности, файловой системой. ;Разумеется, после выполнения всех необходимых действий TSR-программа должна сбросить флаг активизации.
0
|
|
|
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 18
|
|
| 11.12.2010, 11:55 [ТС] | |
|
Это что же получается: вообще никак не осуществить создание файла в резидентной части?
0
|
|
|
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
|
|
| 11.12.2010, 11:59 | |
|
Можно, но только в определенное время, когда именно, читайте в посте №2
0
|
|
|
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 18
|
|
| 11.12.2010, 12:06 [ТС] | |
|
Точнее, придется переделывать программу, используя 28h прерывание?
Подскажите, очень прошу, как грамотно это сделать? Новый обработчик прерывания 09h вообще убирать? Устанавливать вектор для 28h?
0
|
|
|
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
|
||||||
| 11.12.2010, 12:08 | ||||||
|
я делал так:
0
|
||||||
|
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 18
|
|
| 11.12.2010, 12:14 [ТС] | |
|
Спасибо большое! Сейчас разбираться буду.
А что программа делает, можно уточнить?
0
|
|
|
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
|
|
| 11.12.2010, 12:15 | |
|
сохраняет содержимое экрана в файл
0
|
|
|
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 18
|
|
| 11.12.2010, 12:35 [ТС] | |
|
Я извиняюсь, а это полный текст программы?
Добавлено через 8 минут А, это же процедуры-обработчики. А можно попросить основную часть? Или расскажите, меняете ли вектора прерывания и что у Вас является флагом загрузки резидента?
0
|
|
| 11.12.2010, 12:35 | |
|
Помогаю со студенческими работами здесь
9
Перенести часть строки в int Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|