Я не уверен, что кто-то использует Borland c ++ 3.1, но я должен это сделать.
У меня есть программа, которая реализует простые потоки и изменяет контекст этих потоков с помощью прерывания по таймеру.
У меня есть бесконечный цикл и 2 потока, которые выполняют свою работу и переключаются между собой и основным потоком. Их работа состоит в том, чтобы произвести вывод, написать что-то на консоли.
Проблема в том, что каждый раз, когда я запускаю программу, происходит что-то другое.
Иногда это работает на полминуты и просто перестает писать то, что должно. Запись просто останавливается, ошибки нет, и borland не падает.
Иногда это останавливается, и Borland падает без сообщения.
Иногда он останавливается, и Borland вылетает с сообщением «недопустимая инструкция». Иногда в последней строке записывается, прежде чем он останавливается, какие-то странные символы, которые не должны выводиться.
Это консоль, которая «полна» и borland действует странно?
В чем может быть проблема?
Если я правильно помню, было небезопасно писать на консоль (или использовать файловый ввод / вывод) под DOS при вызове из прерывания. Чтобы сделать это правильно, вы должны проверить что-то под названием «Флаг повторного входа DOS» и записывать в консоль только в том случае, если оно равно нулю (см. http://cs.smith.edu/~thiebaut/ArtOfAssembly/CH18/CH18-3.html или поиск в Интернете для получения дополнительной информации)
В реальном и виртуальном режимах 8086 программы не защищены друг от друга. Итак, если ваша программа что-то испортила, например:
если он делает что-либо из этого, не должно быть сюрпризом, что что-то падает, зависает или плохо себя ведет каким-либо другим способом.
Я предполагаю, что у вас есть проблемы 1 и / или 2 выше. Вы также можете участвовать в гонке.
К сожалению, не видя ни одного вашего кода, мы не можем больше помочь. Подумайте об этом, это все равно что лечить нового пациента по телефону.