Няшная / Говнокод #4560 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
logit("e", "%s No Menu! Wait 5 minutes and try again.\n", whoami);
for(j=0;j<60;j++) {
    sleep_ew( 5000 );       /* wait around */
}

sgram из earthworm

Запостил: ftptrash ftptrash, (Updated )

Комментарии (43) RSS

  • Ленивые вычисления: погромисту лень считать, сколько миллисекунд в пяти минутах, и он отложил это до тех пор, пока оно реально не потребуется.
    Ответить
    • Я сталкивался давным-давно с такой же проблемой (возможно), но на Паскале. Там также есть функция sleep(), но почему-то значения больше 32000 (с копейками) она не принимала. Приходилось использовать циклы. По-моему этот код из той же оперы 🙂
      Ответить
      • Она WinApi -ная, если вы конечно не используете Turbo Pascal.
        Ответить
        • Вот-вот. Значит код был тупо издёрнут со старой программы или уже устаревшей книжки )
          Ответить
          • нет, если это функция, то WIN32
            а если процедура, то RTL, которая обертка для Sleep(ulong millisec) и usleep(ulong microsec) в зависимости от платформы
            если вдруг трубопаскакаль то это вообще не sleep() а Delay(word millisec) которая не работала на процах старше 486
            Ответить
            • Она работала, только задержку давала куда меньше. Задержка была реализована через пустой цикл. В начале работы программы это чудо калибровалось по таймеру, при этом на быстрых машинах внутренний 16-битный счётчик неоднократно переполнялся. Дальше понятно.
              Ответить
              • Помнится еще в TP были траблы при использовании Crt модуля. Приходилось фоном что-то ресурсоемкое типа Rar запускать, чтобы программа была работоспособной.
                Ответить
                • Rar в фоне под DOS'ом? =) Траблы местами вылазили, главным образом из-за любви к прямой работе с аппаратурой. Хотя временами были и приколы. Так, например, EXE'шники, скомпилированные TP6, очень любили вылетать с ошибкой деления на ноль, хотя деление в том месте шло на какую-то константу и при покомандной трассировке прекрасно выполнялось. В чём там было дело, я до сих пор не знаю (наверное, какой-нибудь косяк конвейеризации в процессоре), но пришлось как-то писать патчилку, которая заменяла деление вызовом подпрограммы, в которой среди кучи nop'ов шло это деление и возврат. Катило.
                  Ответить
                  • Работало всё под Win, но TP в окне сеанса MS-DOS. Если ничего не путаю. Кстати по-моему как раз проблему деления на ноль удалось обходить указанным мною способом.
                    Ответить
                  • Делилось не на ноль, а на время выполнения некоторой операции. А это время вычислялось для процедуры delay.
                    Теперь понятно, почему на быстром проце делилось на ноль и почему при отладке баг исчезал?
                    Ответить
                    • Не-не-не. По-моему, там была как раз константа, вроде бы в регистре CX. Жаль, катастрофически нет времени восстанавливать старое окружение и ковыряться.
                      Ответить
                    • какой замечательный быдлопатч
                      mov cx, 55
                      div cx

                      поменять на
                      mov cx, 110
                      div cx

                      а когда перестанет помогать поменять на 220, ага
                      ну-ка, ну-ка, кто из олдфагов помнит что значит 55 мс?
                      Ответить
                      • кажется что-то с таймером прерываний связано?
                        Ответить
                        • таймер прерываний
                          прерывание контроллеров
                          терминология жжот, но да, связано
                          ≈ 18,2 Гц IRQ 0
                          Ответить
                            • а высчитывается сколько итераций пустого цикла надо выполнить чтобы прошла 1 миллисекунда

                              я вот думаю, не запостить ли весь этот говнокод, которыый вроде и говном-то не был пока 586 не сделали
                              Ответить
                      • Это минимальный интервал, который можно без извращений измерить в Турбо Паскале.
                        Ответить
                        • почему в только турбо паскале? в целом на писюке, не прибегая к busy-loop`у или перепрограммированию микросхемы таймера
                          Ответить
                          • Это я для наглядности про Турбо Паскаль сказал.
                            Можно интервал срабатывания прерывания от таймера менять и без бизилупа и перепрограммирования микросхемы.
                            Ответить
                              • "писюк"
                                жутко такие заявления обычным людям читать
                                Ответить
                                • А Вы какого года выпуска?
                                  (обычные люди так и говорят...)
                                  Ответить
                                  • Очень мило. Видимо головожопы как-то связаны с мнением, что учитивая что сегодня можно на мобильниках считать микросекунды, всем очевидно что на писюке, который не на P можно считать только десятки миллисекунд. Давно хоть ты в последний раз видел восемьнольвосемьшесть или что там?
                                    Ответить
                                    • омг, идиот, прочитай уже, что обсуждается; потом расскажешь, подойдет RDTSC или нет
                                      Ответить
              • Если процедура, призванная приостанавливать исполнение на N мс, на самом деле приостанавливает на N×X мс, где X - произвольное значение ∈ (0..1], то эта процедура:
                a) работает
                b) не работает
                c) ни то, ни другое
                d) затрудняюсь ответить 😉
                Ответить
      • 32765
        в javascript такая же ситуация.
        Вот и приходится, (если нужна задержка более 30 секунд) делать нечто подобное...
        Ответить
  • Я сидел рядом с ним и посыпал его загорелую спину сухим песком. На его пояснице образовался маленький холмик, струйки песка скатывались по бокам. Я вспоминал произошедшее с нами и мои плавки становились приятно тесными и заметно топорщились.
    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8