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

    +124

    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
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    var
      Form1: TForm1;
      tlst:tthreadlist;
    
    implementation
    
    {$R *.dfm}
    
    function getCount : integer;
    begin
        Result := tlst.LockList.Count;
        tlst.UnlockList;
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    tlst:=tthreadlist.Create;
    end;
    
    { tmythread }
    
    constructor tmythread.create(filename: string);
    begin
    self.FreeOnTerminate:=true;
    self.filename:=filename;
    inherited create(true);
    self.Priority:=tphigher;
    self.Resume;
    tlst.LockList.Add(self);
    tlst.UnlockList;
    end;
    
    destructor tmythread.destroy;
    begin
    tlst.Remove(self);
    tlst.UnlockList;
    end;
    
    procedure tmythread.execute;
    begin
    while not terminated do
    sleep(100);    // в качестве примера, чем-то нагружаем цикл.
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    var
      i:integer;
      n:string;
      temp:tmythread;
      s:string;
    begin
      for i:=0 to getcount-1 do
      begin
        temp:=tlst.LockList.Items[i];   // вот это место. Как Вам кажется, это правильно, или не?
        if assigned(temp) then
        n:=temp.filename;
        if n='ololo' then   // это просто пример, не смеемся) АХАХАХАХ )
        begin
          showmessage('Сканирование этого файла уже выполняется') ;
          exit;
        end;
      end;
      tmythread.create('ololo');
    end;
    
    end.

    Стоит задача сканировать файлы в разных потоках. Как Вам кажется, это адекватное решение?

    Запостил: Stertor, 02 Июля 2013

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

    • >TForm1.Button2Click

      >Как Вам кажется, это адекватное решение?
      Ответить
      • не, дело не в кнопке. Можно ли так ассигновать элемент tthreadlist и класс-потомок потока?

        Не нашел иного способа управления потоками(
        Ответить
        • 1. Дотримуйся стилю Borland
          2. В Delphi 2009+ є модуль System.Generick.Collections
          В ньому є TThreadQueue і TThreadList
          Просто пиши все що треба з різних потоків у ці об'єкти і читай з них в головному потоці, не переживаючи за синхронізацію.
          Ответить
    • Вот код полностью.

      http://www.govnokod.ru/13283
      Ответить
    • дякую, я вже зрозумів
      Ответить
    • Участник, прошу тебя: не поленись, пройди по анкетам и поставь всем минусы.
      Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
      Ответить

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