1. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.

[Soft] NT Sleep. Описание программы

Тема в разделе "Кладезь мудрости", создана пользователем AxXxB, 16 мар 2007.

  1. AxXxB неадекват

    AxXxB

    Хелпер

    Регистрация:
    13 ноя 2006
    Сообщения:
    1.580
    Описание от автора программы (Antares)
    Вкратце - программа уменьшает нагрузку на современные процессоры при запуске старых игр путем их периодической приостановки.

    Собственноручно тестировалась на Star Wars Episode I Racer в WinXP SP2. Результат - снижение нагрузки на процессор с 94% до 16%, причем скорость игры ничуть не уменьшилась.

    Программу можно использовать в качестве замедлялки (то есть, снижать с помощью нее скорость интересующей игры), если указывать достаточно большое количество микросекунд ждущего таймера (подбирается экспериментально).

    Использование (через командную строку или ярлык):
    NtSleep /timer=n "путь:\к\exe-файлу\игры" параметры игры
    где
    • n - значение ждущего таймера (чем больше, тем медленнее будет идти игра / меньше будет нагрузка на процессор), максимум - 32 (ссылка на программу с максимумом в 999 см. ниже)
    • путь:\к\exe-файлу\игры - полное имя (путь) исполняемого файла запускаемой игры, можно относительный (пример пути: c:\games\game.exe)
    • параметры игры - параметры командной строки, которые нужно передать исполняемому файлу игры

    Чтобы использовать эту программу с игрой, запускаемой в режиме совместимости, устанавливайте совместимость на саму NtSleep.exe (или на ее ярлык).

    Скачать ее и узнать больше можно тут: http://imasters.org.ru/viewtopic.php?id=17 (продублировано в аттаче)

    Версия программы с максимальным значением ждущего таймера 999 микросекунд: http://www.old-games.ru/forum/showpost.php?p=746446&postcount=39
     

    Вложения:

    • NtSleep.rar
      Размер файла:
      2,5 КБ
      Просмотров:
      195
    Последнее редактирование модератором: 27 апр 2016
    Val07og, Fabricator, kreol и 10 другим нравится это.
  2.  
  3. Каинхару Lawful Evil

    Каинхару

    Legacy

    Регистрация:
    4 мар 2005
    Сообщения:
    3.126
    Ссылка добавлена в памятку...
     
  4. Allexedge Загадочный зверёк

    Allexedge

    Регистрация:
    9 июл 2006
    Сообщения:
    1.424
    Хмм. Может быть, я туплю, но похоже, чтобы изменить интервал таймера, программу нужно перекомпилировать? А то стандартные 10 мс подходят не для каждой игры...
     
  5. AxXxB неадекват

    AxXxB

    Хелпер

    Регистрация:
    13 ноя 2006
    Сообщения:
    1.580
    Да, нужно перекомпилировать.
     
  6. TBAPb MIA

    TBAPb

    Хелпер

    Регистрация:
    26 сен 2005
    Сообщения:
    1.319
    AxXxB попроси товарища чтобы сделал без перекомпиляции, там ползунок какой-нить...

    Добавлено через 36 секунд
    заодно кинь ссылку на эту тему, пускай видит отзывы
     
    Последнее редактирование: 18 мар 2007
  7. BoaKaa Oldboy

    BoaKaa

    Legacy

    Регистрация:
    6 апр 2006
    Сообщения:
    2.319
    TBAPb, ползунок неудобно, а вот прием значения с командной строки... Впрочем, это и самим сделать можно.
     
    AxXxB нравится это.
  8. Каинхару Lawful Evil

    Каинхару

    Legacy

    Регистрация:
    4 мар 2005
    Сообщения:
    3.126
    BoaKaa, Сначала спроси раzрешения...)
     
  9. Dimouse King of Mice

    Dimouse

    Администратор Переводчик

    Регистрация:
    18 апр 2003
    Сообщения:
    31.671
    Каинхару, там исходник прилагается, можно что угодно с ним вытворять значит.
    А вообще автор придет - сам все скажет.
     
  10. AxXxB неадекват

    AxXxB

    Хелпер

    Регистрация:
    13 ноя 2006
    Сообщения:
    1.580
    Ну, он не мой товарищ, я случайно наткнулся на эту программу... Но все равно попрошу сделать прием из командной строки, как предложил BoaKaa.
     
  11. BoaKaa Oldboy

    BoaKaa

    Legacy

    Регистрация:
    6 апр 2006
    Сообщения:
    2.319
    Каинхару, тогда ждем автора. Он вроде как зарегистрирован здесь и бывает иногда. Патч к Populous - это его же?
     
  12. Returned

    Returned

    Регистрация:
    2 фев 2007
    Сообщения:
    41
    Это просто демонстрация недокументированных возможностей Windows XP. Программа не является готовым продуктом, а лишь показывает один из способов снизить нагрузку на процессор.

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

    Можете менять что хотите и как хотите, если этот пример подскажет вам какие то новые идеи, то мне было бы очень интересно знать об этом. Пожалуй это единственное для чего я включил исходный код.
     
    Val07og, Kiret, XardasMage и 5 другим нравится это.
  13. Crusader Mike

    Crusader Mike

    Регистрация:
    25 ноя 2006
    Сообщения:
    335
    Returned, Не пробовал перебрать потоки процесса и саспендить их? это вполне документировано.
    Правда обновлять список потоков имеет смысл раз в секунду-две...
     
  14. Returned

    Returned

    Регистрация:
    2 фев 2007
    Сообщения:
    41
    Crusader Mike дело в том что, во первых это опять таки не чистый метод (и даже еще более примитивный). Во вторых эта операция значительно медленней и приведет к рассинхронизации потоков, даже не хочу представлять чем это закончится.

    Добавлено через 42 минуты
    Тем, кто просил увеличить задержку таймера. Вероятно здесь почти никто не сможет понять как воспользоваться исходниками и тем более откомпилировать их, потому скажу как можно изменить таймер без перекомпиляции.

    Откройте файл NtSleep.exe шестнадцатиричным редактором (надеюсь не надо объяснять что это такое) и по смещению 0x42A измените один байт на нужное число. По умолчанию там стоит 0A что равняется 10 микросекундам. Большее значение больше разгружает процессор и снижает скорость игры\программы.

    10 я подобрал как оптимальный вариант для большинства игр, без ущерба для скорости.
     
    Последнее редактирование: 19 мар 2007
    Val07og, Low_Pressure, Каинхару и 2 другим нравится это.
  15. Crusader Mike

    Crusader Mike

    Регистрация:
    25 ноя 2006
    Сообщения:
    335
    1. зато документированный и будет работать на последующих версиях
    2. да, потенциально медленней -- ибо будет N context switches... но для 99.9% старых игр не роляет -- они все имеют по одному потоку (N=1)
    3a. правильно написанная многопоточная программа работает нормально при задержке любого из ее потоков -- так что никакой рассинхронизации не будет.
    3b. NT scheduler и так задерживает выполнение потоков на неопределенное и непредсказуемое время (пусть обычно и маленькое)
    3b. как ты думаешь, как выполнена NtSuspendProcess? магически останавливает все потоки одновременно? Максимум, что она может сделать -- залезь на DISPATCH уровень, где ее никто кроме внешних прерываний прервать не может и там все по очереди останавливать -- зуб даю что это не так, ибо не будет работать на многопроцессорных машинах.
     
  16. Returned

    Returned

    Регистрация:
    2 фев 2007
    Сообщения:
    41
    Что касается потоков, если бы 99.9% игр с которыми я работаю имели бы один Thread, то небыло бы никаких препятствий. Но как оказалось, большая часть игр с 96 года (уж незнаю сколько это будет в процентном выражении) активно использует CreateThread, и динамически удаляет и создает потоки во время своей работы, добавь к этому системные dll, некоторые из функций которых так же создают потоки и не всегда кстати сказать удаляют. Это легко проверить ProcessExplorer-ом.

    По всей видимости ты никогда не ковырялся в старых играх. В том то и дело что ПРАВИЛЬНАЯ, не уж то создавал бы я oldproject если бы все игры работали ПРАВИЛЬНО?

    Зачастую игры раннего периода (96-98 гг.) написаны и откомпилированы просто отвратительно. Главным движущим фактором были и остаются деньги, поэтому программисты никогда особо не заморачивались, работает и ладно. Это сейчас после выхода игры сразу клепают патчи (и то не всегда) а раньше если игра вышла, разработчики срубили зелени и все, фирму можно прикрывать или браться за новый проект.

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

    NtSuspend\ResumeProcess это родные функции, они специально оптимизированы для мгновенного сброса контекста всех тредов, они для того и предназначены.

    Есть такая книга "Windows для профессионалов" Джеффри Рихтер. Легко отыщется в яндексе, рекомендую почитать. В одном из разделов автор так-же задался целью написать свою функцию остановки всего процесса SuspendProcess. И вот что он пишет (очень кратко):

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

    Надеюсь вопрос исчерпан?
     
    Последнее редактирование: 20 мар 2007
  17. AxXxB неадекват

    AxXxB

    Хелпер

    Регистрация:
    13 ноя 2006
    Сообщения:
    1.580
    Crusader Mike, ну раз так, значит есть еще один способ. Реализовывай!

    Returned опередил :).
     
  18. Crusader Mike

    Crusader Mike

    Регистрация:
    25 ноя 2006
    Сообщения:
    335
    Неа :)
    1. я знаю, что код игр обычно кривой
    2. неправильно написанная апликация будет валится и без твоих остановок -- просто потому что NT scheduler не дает никаких гарантий по относительному времени исполнения потоков. Т.е. теоретически один поток может работать час, а все остальные -- стоять
    3. насчет многих потоков в играх -- может быть
    4. Рихтера я читал давно во времена своем молодости :-) книжный вариант, где-то еще валяется (увы и ах -- с окнами возиться не люблю и вообще на новой работе вообще писать приходится под юникс)
    4а. Получать можно хендлы на поток, после этого проверять, принадлежат ли они все еще тому же процессу -- это уберет проблему остановки потока не того процесса
    4б. то, что ты можешь не остановить какой-нить поток -- не сильно роляет, как я уже указывал, в следующий цикл обновления списка потоков он подхватится...

    Я не спорю, что NtSuspendProcess будет и лучше и быстрее -- просто, как ты уже указывал, это недокументированная и неподдерживаемая фича, может исчезнуть...
     
  19. iunnamed

    iunnamed

    Хелпер

    Регистрация:
    15 янв 2007
    Сообщения:
    1.202
    Кстати, есть ещё такая вот утилита:
    Код:
                                  ResFree 3.0
    
                           14/10/95          FreeWare !
    
                         Кpаткое описание и настpойка.
    
     Аналоги :  TAME и больше не знаю...
                Основным отличием от TAME является pасчет не на тупого буp-
                жуинского юзеpа, а на хитpого отечественного фидошника.
    
    1. Пpогpамма пpи pаботе отслеживает обpащение к клавиатуpе и в случае
       если пpоцесс злоупотpебляет вызовом int 16h освобождает квант пpоцес-
       соpного вpемени, pанее затpачивавшийся на бесполезный пpостой и обpа-
       ботку ненажатой клавиши. Этим гpешат все пpогpаммы не имеющие встpоенной
       поддеpжки отдачи квантов и специально не pасчитанные на использование
       под многозадачными системами. То есть ОЧЕHЬ многие...
    
    2. Алгоpитм настpойки чpезвычайно пpост:
       Пpи запуске RESFREE в паpаметpе указывается число в диапазоне от 1-65535
       опpеделяющее HА КАКОЙ ПО СЧЕТУ ВЫЗОВ Int 16h ПРИ ОТСУТСТВИИ HАЖАТОЙ КЛАВИШИ
       ОСВОБОЖДАТЬ КВАHТ. Расшифpовать это можно следующим обpазом: в RESFREE
       pанних веpсий отсутствовала настpойка и освобождался КАЖДЫЙ ПЕРВЫЙ КВАHТ,
       что в RESFREE 3.0 соответствует командной стpоке запуска:
    
               c:\> resfree 1
    
       Если у вас возникали пpоблемы с коммуникационным софтом, то есть смысл
       увеличивать это значение до тех поp, пока они не исчезнут. А это pано
       или поздно случится :) Если же у вас пpоблемм нет и не было с пеpвыми
       веpсиями ResFree, то все-pавно поставьте ResFree 3.0 - он ест меньше
       памяти.
    
    3. Запускать RESFREE 3.0 под Windows 95 можно или в autoexec.bat или уже
       пpи pаботе Windows 95 из любого DOS-окна. Оно будет pаботать для этого
       пpиложения с тем паpаметpом, котоpый вы указали. В дpугом окне нужно
       запускать опять и со своим паpаметpом.
    
    4. Под OS/2 ResFree нужно запускать в той виpтуальной машине, в котоpой
       он должен pаботать. Hа дpугие пpогpаммы его влияние не pаспpостpаняется.
       (По кpайней меpе не должно...)
    
    5. Windows NT - см. выше.
    
    6. Что касается счетчика квантов задаваемое пpи стаpте, то совет только один-
       подбиpается опытным путем. Эта величина зависит очень от многих паpаметpов
       и советовать что-нибудь сложно. Если у вас все отлично pаботает пpи 1
       то нет смысла запускать ResFree с паpаметpом 2. Естественно чем паpаметp
       меньше, тем меньше вpемени система тpудится вхолостую.
    
    
                Обpащение к благодаpным пользователям !       ;)
    
     Если у вас в пpоцессе использования возникли пожелания то шлите их мне.
     Если у вас все классно pаботает, то шлите свою конфигуpацию и значение
     паpаметpа. Hе забудьте пpо софт, котоpый вы используете !
     И вообще, если у вас возникло желание поделиться чем-нибудь со мной, то
     тоже шлите. Пиво, оно, на доpоге не валяется... ;)
    
                                                        Андpей Лукичев.
    
    Взять можно на DNOSP. Прямые ссылки запрещены, так что придётся вручную идти по пути: "Загрузить", затем "DN OSP" и там искать снизу "ResFree 3.0". Архив по ссылкам продублирован в аттач. - Sharp_ey
    От себя отмечу, что программа очень хорошо себя показала для большинства старых игрушек с параметром "1". Запускать лучше из BAT файла такого содержания:
    Код:
    @echo off
    resfree 1
    game.exe
    exit
     

    Вложения:

    • resfree.zip
      Размер файла:
      2,1 КБ
      Просмотров:
      57
    Последнее редактирование модератором: 27 апр 2016
    Val07og, kreol, AxXxB и ещё 1-му нравится это.
  20. keeperb

    keeperb

    Регистрация:
    7 июл 2006
    Сообщения:
    254
    Приветствую всех, давненько не заходил, решил тут намедня запустить SS2 на 2x ядернике и столкнулся с "быстродействием" игры. С ЧПУкиллер рывки в игре, так что не вариант и остальные ухищрения не помогли. Последняя надежда на эту прогу. Помогите нубу работать с ней, что-то не понял как запускать ее из командной строки ??
     
  21. kreol Старший офицер Чёрной Гвардии

    kreol

    Администратор

    Регистрация:
    2 июл 2007
    Сообщения:
    93.681
    keeperb, ОБЕ версии с сайта адаптированы к запуску на двухъядерном процессоре, если что.
    Кроме того, тебе надо подробнее сказать, что тебе непонятно в работе с программой.
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление