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

    +81

    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
    procedure SetCurrentThreadName(const AName: String);
    type
      TThreadNameInfo = record
          RecType: LongWord;
          Name: PChar;
          ThreadID: LongWord;
          Flags: LongWord;
        end;
    var
      LThreadNameInfo: TThreadNameInfo;
    begin
      with LThreadNameInfo do
      begin
        RecType := $1000;
        Name := PChar(AName);
        ThreadID := $FFFFFFFF; // -1 - текущий поток; также сюда можно вставить ID другого потока
        Flags := 0;
      end;
      try
        RaiseException($406D1388, 0, SizeOf(LThreadNameInfo) div SizeOf(LongWord),
          PDWord(@LThreadNameInfo));
      except
      end;
    end;

    Попытка создать именованный поток.
    Не хак. (http://msdn.microsoft.com/en-us/library/xcb2z8hs%28VS.71%29.aspx)

    Запостил: brutushafens, 20 Апреля 2014

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

    • Задокументированный хак хаком быть не перестаёт :).

      Я немного погуглил, получается, это такое хитрое сообщение отладчику.
      Ответить
      • Многие люди с тобой не согласятся.
        Ответить
        • Ну, по-моему, хак - это не всегда прямо что-то абсолютно плохое. Это просто хак. Недокументированный хак - вот это уже плохо.
          Ответить
          • хаки на то и хаки, что могут быть гораздо более хрупкими
            Ответить
          • Я не сказал, что они правы, но таких предостаточно.
            Ответить
    • Самая засада с этим в том, что дебуггер должен быть подключен в момент установки имени -- иначе просто ничего не произойдет.
      Ответить

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