|
Страницы: [1] | << Новый | Старый >> | Ответ не возможен |
Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.
Автор | Сообщение |
Serg Серж Фев, 2007 Сообщений: 12 | Serg url://forum.message:1829 100% загрузка процессора при запуске Borland C Грузит проц Borland C. В котором нужно делать лабы. Что нибудь можно сделать? |
07.02.07 21:56 | URL сообщения | Журнал | Приват | Инфо об авторе |
popoff Yuri ![]() Июл, 2004 Сообщений: 923 | popoff url://forum.message:1830 Serg, ntvdm.exe - это виртуальная ДОС-машина (NT Virtual Dos Machine). Эта машина предназначена для запуска 16-битных приложений, коим и является Borland C под операционной системой более новой версии, коей и является, к примеру, Windows XP. Эффект, который Вы наблюдаете - является результатом того, как распределяется время процессора между разными процессами. Диспетчер (часть операционной системы, которая занимается распределением процессорного времени) может выделить процессорное время процессу, о котором диспетчеру известно, что процессу в данный момент необходимо это время. В случае, если диспетчер не может узнать, сколько процессорного времени необходимо процессу, то диспетчер выделяет просто сколько угодно времени, кроме случая, если какому-нибудь другому процессу время требуется больше, чем этому. ntvdm.exe не может сказать диспетчеру, сколько времени ему требуется для работы, потому что 16-битные приложения работают другим способом. Старые версии Windows могли определить, когда процесс свободен - для этого этот процесс должен вызывать специальный системный метод GetMessage(). ntvdm.exe - это подсистема для эмуляции ДОС. С другой стороны, у ДОС-приложений такие вызовы просто не были нужны, так как ДОС - это однопроцессорная операционная система и если там какой-нибудь процесс запускался, то всё время выделялось только ему. Процессам в ДОС нет необходимости сообщать системе, что они свободны, так как любой запущенный процесс в системе - всегда единственный процесс в системе. Таким образом, ntvdm.exe просто не может узнать, когда приложение, которое выполняется в эмулируемой среде ДОС (в данном случае это Borland C) освободится. Поэтому, всё, что может сделать ntvdm.exe - это просить у системы всё процессорное время. Вероятно, в Borland C стоит какой-нибудь цикл наподобие такого: Тем не менее, в Интернете можно найти множество разных способов, как можно победить проблему путём настройки операционной системы. Лично мне ни один из тех способов не помог. Кроме того, в Интернете можно найти несколько программ, которые решают такую проблему. Я не стал пользоваться теми программами и Вам не предлагаю, так как я не уверен в том, что те программы не делают чего-нибудь лишнего. Официального патча от майкрософта или от борланда я пока не нашёл. Если честно, если бы я работал в майкрософте программистом, и мне поручили бы решить эту проблему, то я затруднился бы найти решение. Разве что каким-нибудь эвристическим методом, например, наблюдая за частотой вызова kbhit(), но даже это не может быть хорошим способом, так как между частыми вызовами kbhit() могут быть полезные вычисления, и у системы нет способа узнать, полезные те вычисления или пустые. Проблему могла бы решить борланд, выпустив новую версию компилятора. И, в целом, борланд выпустила новую версию компилятора, но мы пока что пользуемся этой, старой версией, так как у неё есть определённые ограничения на разрабатываемый Вами программный код, привыкание к которым дисциплинирует Вас и даёт Вам понять, что было раньше, а что есть сейчас. Лично я просто смирился с проблемой. Программировать можно вполне. Немножко непривычно, что подтормаживает, но вполне выносимо. ________________________________ Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить. |
07.02.07 22:53 | URL сообщения | Приват | Инфо об авторе |
![]() | Гость | tubik url://forum.message:2700 tubik >В случае, если диспетчер не может узнать, сколько процессорного времени необходимо процессу Простите, а можно рассказать о том как это происходит - диспетчер узнает у процесса сколько ему времени необходимо? Или дать ссылку на описание этого? |
![]() | 04.01.09 00:31 | URL сообщения |
![]() |
Гость | Александр url://forum.message:2945 Александр Эта проблема решается крайне просто - установкой низкого приоритета процессу ntvdm.exe . Программированию это никак не помешает, так как всё равно ему будет отдаваться очень много процессорного времени, да и другим процессам оно не будет мешать. |
24.10.09 17:38 | URL сообщения |
Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.
Страницы: [1] | << Новый | Старый >> | Ответ не возможен |
Вход |
Цитирование материалов моего сайта приветствуется! при условии видимой действующей! гиперссылки на мой сайт. [Ссылки] Если Вы нашли опечатку на этой странице, пожалуйста, выделите ее мышью и нажмите Ctrl+Enter. Сделаем язык чище! (c) Yuri Popoff, 2004 - 2008, popoff.donetsk.ua, style.donetsk.ua |
|