1. Pascal / Говнокод #15982

    +89

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    var
      Form1: TForm1;
      i:integer; // глобальные переменные - "общие"
      CritSec:TCriticalSection; // объект критической секции
    implementation
    
    {$R *.dfm}
    
    procedure ThreadFunc;
    begin
    while (i<100000) do
      begin
      CritSec.Enter; // открываем секцию
      i:=i+1; //увеличиваем i
      Form1.Label1.Caption:=IntToStr(i); //из потока к элементам формы нужно обращаться через имя формы
      CritSec.Leave; // закрываем
      end;
    
    endthread(0); // красиво выходим из потока.
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var tid1,tid2,id:longword;
    begin
    i:=0;
    tid1:=beginthread(nil,0,Addr(ThreadFunc),nil,0,id); //запускаем функцию ThreadFunc в потоке
    tid2:=beginthread(nil,0,Addr(ThreadFunc),nil,0,id); //в tid2 присваиваем Идентификатор потока, который пригодится позже.
    end;
    
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    CritSec:=TCriticalSection.Create; // создаём объект критической секции, на всё время работы программы
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
    CritSec.Free; // разрушаем
    end;
    
    end.

    Уебище, блять, лесное.
    http://grabberz.com/showthread.php?t=24619

    Запостил: brutushafens, 14 Мая 2014

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

    • cleaned
      Ответить
      • Причем в делфи есть synchronize (или как там его?), позволяющий прокинуть вызов в UI поток, и никакие критические секции ему не нужны ;)

        > beginthread
        Это же винапишная функция, просто ее в кривом регистре записали?
        Ответить
        • cleaned
          Ответить
          • > Дельфинам пох, язык не чувствителен к регистру.
            И это плохо :( Нечувствительность к регистру развращает людей.
            Ответить
            • cleaned
              Ответить
              • > почему имена API пишут в разном регистре
                Потому что GetLogicalDriveStrings или get_logical_drive_strings читаются на порядок легче, чем getlogicaldrivestrings. Тебя же не напрягает в русском языке писать пробелы между словами?
                Ответить
            • >Нечувствительность к регистру развращает людей.
              Не. Людей развращают ide.
              А case-sensitive это просто сишкоблядское говно, экономия на спичках в парсере.
              Ответить
              • > Людей развращают ide.
                Ну вот с IDE обычно все-таки пишут в том же регистре, как и оригинал. Т.к. автодополнение.

                > сишкоблядское говно, экономия на спичках в парсере
                Идеально, имхо, было бы совместить достоинства sensitive и insensitive - запретить писать идентификаторы, отличающиеся только регистром букв, и одновременно с этим запретить писать идентификаторы в неправильном регистре:
                int Foo = 0;
                x = foo; // ошибка: переменная foo не найдена, возможно вы имели в виду Foo
                int foo; // ошибка: переменная Foo уже есть, хоть и в другом регистре
                Ответить
                • >вот с IDE обычно все-таки пишут в том же регистре, как и оригинал. Т.к. автодополнение.
                  Об том и речь. ИДЕ мешают любителям case-sensitive запоминать в каком регистре то что они хотели написать.

                  >запретить писать идентификаторы, отличающиеся только регистром букв, и одновременно с этим запретить писать идентификаторы в неправильном регистре

                  ЕМПИН, VB сам преобразовывал к тому регистру в котором объявлена переменная. То есть написал сверху
                  Dim SomeShit as Byte И везде ниже, когда кодер писал переменную someshit, someSHit итп, она автоматически превращалась в нужный регистр. Естественно он это видел.
                  Ответить
                  • > запоминать
                    А хуле там запоминать? Есть же соглашения о именованиях, и их не так уж и много. Никто в нормальном коде не пишет AbSTraCtFacTorY.
                    Ответить
                    • >Есть же соглашения о именованиях, и их не так уж и много.
                      Эти соглашения противоречат:
                      >>запретить писать идентификаторы, отличающиеся только регистром букв
                      Пример ниже:
                      >AbsractFactory - класс
                      >absractFactory - инстанс
                      Ответить
                      • > absractFactory - инстанс
                        Нинужно, т.к. тупой копипаст имени класса ничего не говорит о назначении переменной:
                        Point point = new Point(x, y); // bad
                        Point topLeft = new Point(x, y); // good
                        Ответить
                        • >Нинужно, т.к. тупой копипаст имени класса
                          Согласен, это типичный DRY.
                          Но такого ж кода полно.
                          И именно IDE автоматически подставляют такие ничего не значащие переменные!
                          Ответить
                          • > И именно IDE автоматически подставляют такие ничего не значащие переменные!
                            Дык откуда им знать, чего я хочу в этот Point положить, и какие объекты будет запиливать вот эта абсрактная фабрика? Мысли читать они пока не научились... Все-таки первый раз имя переменной надо написать самому.
                            Ответить
                            • Ну есть такие которые для совсем ленивых в типе Point предлагают имя point, p итд.
                              Ответить
                              • > Ну есть такие которые для совсем ленивых в типе Point предлагают имя point, p итд.
                                Да тут скорее трабла не в том, когда сам пишешь, а в тулзах в духе "запили мне функцию по ее вызову", "наебашь мне геттеров, сеттеров и конструктор" или "вот этот код вынеси в функцию". Вот они очень любят придумывать говёные имена, которые потом приходится рефакторить.
                                Ответить
                                • Придумывают говеное имя дл конструктора?
                                  Ответить
                                • That's a crkaaerjcck answer to an interesting question
                                  Ответить
                                • There's a terrific amount of knolwedge in this article! http://hfzhzgmr.com [url=http://jcfelvhvqf.com]jcfelvhvqf[/url] [link=http://xvtfochn.com]xvtfochn[/link]
                                  Ответить
                        • > тупой копипаст имени класса ничего не говорит о назначении переменной

                          ок, предложи нормальные имена, говорящие о назначении переменной, для объектов классов IndexWriter, Connection, etc. Максимум, что можно для них сделать - сократить до writer и conn.

                          Всегда есть общий код в вакууме, вся польза которого как раз в том, что он ничего не знает о назначении переменных. Половина библиотеки хаскеля так написана (только там имена небось ещё шикарней - x и xs).

                          Что теперь делать, добавлять префикс T для индикации типа? ;)
                          Ответить
                          • > Что теперь делать, добавлять префикс T для индикации типа? ;)
                            Ну в паскале с его регистронезависимостью так и делали. Никого это особо не напрягало.

                            Еще можно было бы разнести неймспейсы переменных и типов, как в жабе, чтобы все-таки разрешить писать SomeClass someClass. Но тогда всякие sizeof() не смогут работать.
                            Ответить
                    • UsbFactory или USBFactory?
                      Ответить
                      • А, точно.
                        HttpRequest vs URLEncoder.
                        Ответить
                      • Мне нравится второе, ибо UniversalSerialBusFactory -> USBFactory. Хотя соглашения разные бывают.
                        Ответить
                        • Просто во втором случае странно выглядит когда какие-нибудь USBToTCPIP или USBSID получаются целиком капсом, как константы.
                          Ответить
                  • > VB сам преобразовывал
                    У VB, емнип, вообще жестокий рестайлинг был. Вроде бы он и отступы сам делал как надо, даже если ты писал их не так, и пробелы втыкал вокруг операторов... Нынешние IDE нервно курят в сторонке...
                    Ответить
                    • Насчёт отступов - не помню, вроде нет.
                      > и пробелы втыкал вокруг операторов
                      Такое было, да. Ну и заебись - удобно ж. Главное что это можно было отключить.
                      Ответить
                    • cleaned
                      Ответить
            • А всё ради чего:? Чтобы писать и различать:
              AbsractFactory absractFactory = new AbsractFactory();
              Ответить
              • cleaned
                Ответить
                • Конечно, но это устоявшаяся говнопрактика.
                  Первый же гкод в разделе Java.
                  http://govnokod.ru/15977
                  MuleClient client = new MuleClient(muleContext);
                  MuleMessage message =
                  Я более чем уверен что muleContext имеет тип MuleContext.
                  Ответить
                • Вся суть жавки. Вот до чего люди без var доходят.
                  Ответить
                • NSString* nuString=[NSString stringWithString:oldString];
                  Ответить
        • >в кривом регистре записали?
          Сишнофреник, Паскалю похуй на твой регистр. ПРограммисты Паскаля не заморачиваются маструбацией с регистрами, строками, памятью и указателями , когда пишут код.
          Ответить
      • "Наверно, кому-то пригорело, оттого, что нет описания ошибки"...
        Какое описание? Там весь код - одна сплошная ошибка...
        Ответить
    • Так это еще и учебный пример?? Мама дорогая...
      Ответить
    • // красиво выходим из потока.
      ...виляя жопой
      Ответить
    • You saved me a lot of haslse just now.
      Ответить
    • Your answer was just what I needde. It's made my day! http://musvomxj.com [url=http://ujfrarpy.com]ujfrarpy[/url] [link=http://bxbpmpey.com]bxbpmpey[/link]
      Ответить

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