Экземпляры потока Делфи. Вопрос.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Protocoler, 25 Feb 2018.

  1. Protocoler

    Protocoler Elder - Старейшина

    Joined:
    10 Oct 2012
    Messages:
    51
    Likes Received:
    54
    Reputations:
    81
    Вопрос для лучшего понимания работы многопоточности и описания класса.

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

    На примере POP3/IMAP чека ( чтобы для каждого потока создавался свой объект POP3 ):

    TMythread = class(TThread)
    private

    POP3 : TPOP3Send;


    И затем создавать объект в TMyThread.Execute ...

    TMyThread.Execute
    begin
    POP3:=TPop3Send.create;
    end;

    Либо лучше описывать POP3 : TPOP3Send; в var Execute ?? Как будет правильно ?

    Вопрос касательно не только данного объекта, но и остальных переменных которые не должны быть доступны другим екземплярам, чтобы поток не подвисал..
     
  2. pas9x

    pas9x Elder - Старейшина

    Joined:
    13 Oct 2012
    Messages:
    423
    Likes Received:
    585
    Reputations:
    52
    Без разницы в private или в var. Другим экземплярам класса свойства доступны не будут потому что:
    1) Каждый поток - это отдельный экземпляр TMythread и у каждого экземпляра свои значения свойств
    2) Доступ к приватным свойствам извне получить невозможно

    Вопрос где описывать переменные - более абстрактный и относится к кодингу вообще любого класса, не обязательно TThread.
    Если у тебя несколько методов класса пользуются одной переменной - её надо делать свойством класса.
    Если переменная используется только внутри одного метода то можно поместить её в var.
     
    Protocoler and spiner like this.