1. C# / Говнокод #12783

    +133

    1. 1
    2. 2
    3. 3
    4. 4
    while (Process.GetProcesses().Where(x => x.ProcessName == "FREngine").Count() >= 2)
    {
     Thread.Sleep(5000);
    }

    ждём-с

    Запостил: taburetka, 22 Марта 2013

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

    • soon.jpg
      Ответить
    • сошлись на
      while (true)
      {
      lock (_lock)
      {
      if (Process.GetProcesses().Where(x => x.ProcessName == "FREngine").Count() < GetProcessNumber)
      {
      engineLoader = new FREngine.OutprocLoader();
      break;
      }
      Thread.Sleep(1000);
      }
      }
      Ответить
      • Но ведь это LINQ, тут можно расспаралелить ожидание.
        Чтоб например 5 потоков ждали по одной секунде. Достаточно сделать extension-метод sleep
        Process.GetProcesses()
        .Where(x => x.ProcessName == "FREngine").Count() >= 2)
        .AssParallel().Sleep(1000)
        Ответить
        • ну чему ты детей учишь!
          Ответить
          • Оптимизировать свои приложения под многоядерные системы! Мы же на говнокоде.
            Ответить
        • а что насчёт Task Parallel Library?
          Ответить
        • Where не нужен.
          В Count'e тоже можно описать предикат.
          Ответить
    • По хорошему -- сделать SafeWaitHandle вокруг Process.Handle и делать WaitHandle.WhenAny() (или WhenAll(), зависит от задачи)
      Ответить
      • интересно, будут ли такое фокусы работать под линукс
        Ответить
        • > C#
          > Linux
          Из буханки хлеба можно сделать отличную модель троллейбуса.
          Ответить
          • Mono давно уже завершённый и стабильный проект, не надо тут. Но бывают corner cases со всякими handle'ами.
            Ответить
            • Я всё жду, когда микрософт его засудит нахер и анально покарает весь софт под него.
              Ответить
              • Прошло уже десять лет. Во-первых, ISO; во-вторых, официальное письмо обещания не судить. Либы которые не покрываются ISO типа WinForms кривы, непопулярны и вместо них используются опенсорсные аналоги.

                Весь истеричный визг исходящий от Столлмана следовало бы игнорировать.
                Ответить
                • Кмк, это пока у них эти ниши не освоены - будут мягко стелить и обещать. В реальности, за платформы, отличные от intel, входящие в сферу интересов микрософта - те же фор ведроид, иос, могут и нервничать.
                  Ответить
                  • Ну и как легально Майкрософт может им запретить разрабатывать порты под андроид и иос? Говорю же, это всё необоснованные визги, которые не подкреплены вообще ничем. На голову в любой момент и кирпич может упасть. Об этом скорее нужно беспокоиться, чем о Майкрософте судящем моно.
                    Ответить
                    • Я пока не особо оценивал реальность иска. Только недавнее дело оракл против гугля тому подтверждение.
                      Ответить
                • >во-вторых, официальное письмо обещания не судить
                  http://bfolder.ru/_ph/2/2/55940729.jpg

                  Вспомним такие же "обещания" с VC-1. Важно у кого патенты. А патенты у МС.
                  Ответить
                • >Весь истеричный визг исходящий от Столлмана
                  Не знаю, видел ли ты. Но Столлман разговаривает очень мягко и спокойно. Как добрый доктор говорит о том что надо мыть руки перед едой и меньше курить, так и Столлман поясняет: "you shouldn't use them".
                  Ты волен много курить и есть с грязными руками, но если заработаешь рак горла или подхватишь глистов - твои проблемы.

                  В стране где на копирайты, патенты и закон в целом просто ложат хуй это конечно не особо актуально.
                  Но ведь Столлман живет немного в другом полушарии.
                  Ответить
                  • Самый сок будет, когда все, считавшие его бородатым лжецом и троллем, наглотаются лучей бобра от микрософта. Это гораздо более вероятно, чем все думают.
                    Ответить
                    • >считавшие его бородатым лжецом и троллем
                      И какое совпаденье! Среди хабрабыдлаюзеров таких большинство. Ведь он не показывает новый красивый, блестящий планшет с кучей ненужных функций. За ним нет мощных рекламных кампаний, для раскрутки.

                      У него одно оружие: слово, подкрепленное элементарной логикой и здравым смыслом.
                      Не для всех людей это убедительно. Для многих неопровержимым фактом является эмоцинальность или навязчивость с которой им это пропихивают. Или же они просто принимают на веру то что говорил дядя Билл или дядя Стив.
                      Потому не считаю верным называть его пророком. Ведь он не заставляет в что-то верить или слать ему бабки и всю свою инфу.

                      И почему Столлман всегда оказывается прав? Как это было быдлодевайсами и с тивоизацией, которую просрал Линус .
                      Потому логика в конечном счете неопровержима.
                      Ответить
                • А истеричные визги и крики - это совсем другая компания:
                  http://www.youtube.com/watch?v=wvsboPUjrGc
                  http://www.youtube.com/watch?v=fVTU5PxN3As

                  Не надо путать Столлмана со своим лысым спермогуру.
                  Ответить
                  • Ему срочно нужен экзорцист. Кстати, до этого ролика я думал, что Балмер адекватный...
                    Ответить
        • врядли, это довольно таки microsoft-specific; плюс, я не углублялся, но вроде как под Linux нет прямого аналога WaitForMultipleObjects()
          Ответить
          • > под Linux нет прямого аналога WaitForMultipleObjects()
            Нету. По сути есть 3 варианта:
            1) если нужно дождаться пока завершатся все нужные процессы, и другой работы нет, можно тупо вызвать waitpid для каждого из них (в любом порядке, т.к. все равно ждем всех);
            2) если нужно дождаться процесс, который закончит первым, и другой работы нет, можно поюзать wait, который вернет pid и статус;
            3) если есть другая работа (вычисления, опрос сокетов и т.п.), то придется ловить SIGCHLD, и вызывать wait из обработчика.

            P.S. Да, в отличие от винды чужих детей дожидаться нельзя. Вообще.
            Ответить
          • >под Linux нет прямого аналога WaitForMultipleObjects()
            Use Epoll.
            Ответить
            • epoll, насколько помню, умеет ждать только на сокетах и пайпах. Мьютексы и процессы, в отличие от WaitForMultipleObjects он ждать не сможет.
              Ответить
              • You can wait signals at pipe from many processes by epoll.
                WaitForMultipleObjects for mutex is needn't wrongly shit.
                Ответить
                • > WaitForMultipleObjects for mutex is needn't wrongly shit
                  Верно.

                  > You can wait signals at pipe from many processes by epoll.
                  Что здесь имеется в виду? Засунуть stdin или stdout дочернего процесса в epoll и ждать их закрытия? Ну тоже имеет право на жизнь.
                  Ответить
                  • Can epoll do it? For example this, if epoll can. But a think, that epoll can't it. Process (from atexit-handler) or (thread from destructor) must send into pipe signal, that observable object is die.
                    Ответить
                    • Да проще SIGCHLD поймать, чем править детей так, чтобы они что-то отправляли. К тому же часто нужно запускать готовый бинарник, который нельзя исправлять.

                      В том же libev ожидание дочерних процессов запилено именно через SIGCHLD.

                      P.S. Do you speak russian? I can't understand your english.
                      Ответить
              • В моно все моно-процессы делят расшаренную память. Так что через неё можно как-то.
                Ответить
                • > все моно-процессы делят расшаренную память
                  O_o. А как же безопасность...
                  Ответить
                  • IIRC расшаренная память - глубоко системная и не особо экспозится в C#-код.
                    Ответить
                    • Ну тогда не надо было так пугать ;) Я по вашей фразе подумал, что все моно-процессы живут в одной общей памяти, как шведская семья.

                      Небольшой кусочек shared memory для IPC это совсем не страшно.
                      Ответить

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