1. Си / Говнокод #4560

    +146

    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, 08 Ноября 2010

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

    • Умножение через сложение.
      Ответить
    • Ленивые вычисления: погромисту лень считать, сколько миллисекунд в пяти минутах, и он отложил это до тех пор, пока оно реально не потребуется.
      Ответить
      • ну написал бы 1000*60*5
        Ответить
      • Я сталкивался давным-давно с такой же проблемой (возможно), но на Паскале. Там также есть функция 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. Жаль, катастрофически нет времени восстанавливать старое окружение и ковыряться.
                        Ответить
                    • http://faq.ixbt.com/_soft/error.html
                      Ответить
                      • какой замечательный быдлопатч
                        mov cx, 55
                        div cx

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

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

                                я вот думаю, не запостить ли весь этот говнокод, которыый вроде и говном-то не был пока 586 не сделали
                                Ответить
                                • Для тех времён, видимо, нисколько не был...
                                  --
                                  Только, насколько помнится, обычно 50 мс?
                                  Ответить
                        • Это минимальный интервал, который можно без извращений измерить в Турбо Паскале.
                          Ответить
                          • почему в только турбо паскале? в целом на писюке, не прибегая к busy-loop`у или перепрограммированию микросхемы таймера
                            Ответить
                            • Это я для наглядности про Турбо Паскаль сказал.
                              Можно интервал срабатывания прерывания от таймера менять и без бизилупа и перепрограммирования микросхемы.
                              Ответить
                            • http://eugen.dedu.free.fr/docs/timer.html
                              Ответить
                              • ты заголовок-то читал? там где слово на P?
                                Ответить
                                • "писюк"
                                  жутко такие заявления обычным людям читать
                                  Ответить
                                  • А Вы какого года выпуска?
                                    (обычные люди так и говорят...)
                                    Ответить
                                  • писюк это на П, а если в нём проц на не на P, то http://www.keepaustinstupid.com/HEAD-UP-YER-ASS.jpg
                                    Ответить
                                    • Очень мило. Видимо головожопы как-то связаны с мнением, что учитивая что сегодня можно на мобильниках считать микросекунды, всем очевидно что на писюке, который не на P можно считать только десятки миллисекунд. Давно хоть ты в последний раз видел восемьнольвосемьшесть или что там?
                                      Ответить
                                      • омг, идиот, прочитай уже, что обсуждается; потом расскажешь, подойдет RDTSC или нет
                                        Ответить
                • Если процедура, призванная приостанавливать исполнение на N мс, на самом деле приостанавливает на N×X мс, где X - произвольное значение ∈ (0..1], то эта процедура:
                  a) работает
                  b) не работает
                  c) ни то, ни другое
                  d) затрудняюсь ответить ;-)
                  Ответить
                • не работала-неработала!
                  runtime 200 же
                  нет?

                  деццтвое мое деццтво)
                  Ответить
                  • http://lurkmore.ru/Pascal
                    Оно :)
                    Ответить
                  • собственно, да
                    в первозданном виде не работал весь модуль, т.к. валился с делением на 0 при инициализации
                    Ответить
        • 32765
          в javascript такая же ситуация.
          Вот и приходится, (если нужна задержка более 30 секунд) делать нечто подобное...
          Ответить
    • Я сидел рядом с ним и посыпал его загорелую спину сухим песком. На его пояснице образовался маленький холмик, струйки песка скатывались по бокам. Я вспоминал произошедшее с нами и мои плавки становились приятно тесными и заметно топорщились.
      Ответить

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