Конференция "KOL" » Потоки [Delphi, Windows]
 
  • Robt (13.09.07 21:28) [0]
    Чо делать с synchronize(???) процедуру без параметров не принимает
    требует метод потока
    Это как панимать ?
  • vampir_infernal (14.09.07 06:36) [1]
    Как написано, так и понимать. В качестве параметра в Synchronize передается имя какого-либо метода этого же потока. Например:
    type
     TMyThread = object( TThtead )
     private
        procedure MyProc;
    //--описание

    implementation

    function TMyThread.Execute : integer;
    begin
    //--код
    Synchronize( MyProc );
    //--код
    end;

    procedure TMyThread.MyProc;
    begin
    //какой-то код,Кторый выполнится синхронно с основным потоком.
    end;

  • Galkov © (14.09.07 06:57) [2]
    Причем тут "этого же потока" :shock:
  • robt (14.09.07 09:25) [3]
    а что в кол можно переопределять паток ?
    и зачем если он хавает метод формы ?
    и зачем метод когда в API просто DWORD WINAPI ThreadProc(LPVOID lpParameter);
  • vampir_infernal (14.09.07 11:53) [4]

    > Причем тут "этого же потока" :shock:

    Я не совсем правильно выразил мысль. Имелся в виду вообще "метод". Передавать в synchronize метод объекта, отличного от того, в котором поток был создан, я не пробовал, поэтому ничего не могу утверждать о корректности такой конструкции.


    > а что в кол можно переопределять паток ?

    TThread из KOL.pas - это обычный объект. Что Вам мешает унаследовать от него потомка?


    > и зачем если он хавает метод формы ?

    "Метод формы" он не хавает


    > и зачем метод когда в API просто DWORD WINAPI ThreadProc(LPVOID
    > lpParameter);

    ThreadProc - это основная функция потока, указатель на которую передается в CreateThread. Она и не должна быть методом. Из нее в последствии (как правило) вызывается Thread.Execute, из которого Вы можете вызвать Synchonize.
  • Galkov © (14.09.07 12:45) [5]

    > и зачем если он хавает метод формы ?

    затем, что при этом (при synchronize) гарантировано отсутствие конфликтов этого вашего "метода формы" с другими событиями интерфейса.

    Грубо говоря, работать с визуальными элементами из другого потока можно ТОЛЬКО через synchronize.
    А за работу (с контролами созданными в основном потоке) через Execute - надо руки отрывать сразу, не дожидаясь пока все громко крякнет.


    > Имелся в виду вообще "метод".

    Вопросов больше не имею :))
  • robt (14.09.07 13:09) [6]

    > затем, что при этом (при synchronize) гарантировано отсутствие
    > конфликтов этого вашего "метода формы" с другими событиями
    > интерфейса.

    я про то и говорю synchronize(form1.draw);
  • Galkov © (14.09.07 14:18) [7]

    > я про то и говорю

    Вообще-то, что такое это "то" - непонятно совершенно.
    Как и непонятно, остались проблемы с пониманием, или нет
    И к чему тогда относилось "зачем", если "про то и говорилось"
    И чего вообще было было непонятно с самого начала - тоже не очень понятно стало как-то...
  • vampir_infernal (14.09.07 16:27) [8]
    Рискну предположить, что программа товарища Robt читает откуда-то какие-то данные в потоке и хочет выводить их на форму в виде графиков, таблиц, etc (например, данные с com-порта).
  • Robt (14.09.07 19:46) [9]
    ага спектр (звук), и ком порт на подходе (дист управление)

    то есть я понял что передаеца метод чтоб знать кому посылать
    сендмессажу для синхронизации , но это уже не важно ...
  • Vladimir Kladov (16.09.07 20:03) [10]
    Наконец-то разрулил свои внеколовские дела. Завтра буду все читать и готовить обновление.
  • max727 (04.10.07 13:08) [11]
    Помогите разобраться
    чем использование потоков KOL отличается от стандартных дельфовых потоков?

    это вырезка из help-а
    unit Unit2;

    interface
    uses
     Classes;
    type
     TMyThread = class(TThread)
     private
       { Private declarations }
     protected
       procedure Execute; override;
     end;
    implementation
    { TMyThread }
    procedure TMyThread.Execute;
    begin
     { Place thread code here }
    end;
    end.



    не мог бы кто-нибудь привести аналогичный пример для KOL?
  • ANTPro © (04.10.07 14:05) [12]
    > [11] max727   (04.10.07 13:08)

    http://www.kolnmck.ru/files/demo/demothread.7z ?
  • max727 (04.10.07 18:48) [13]

    > ANTPro ©   (04.10.07 14:05) [12]
    > http://www.kolnmck.ru/files/demo/demothread.7z ?


    А если мне нужно использовать Synchronize, то как?
    этого в примере нет
  • KOLBoss © (03.12.07 20:36) [14]
    Подскажите пажалуйста как создать динамически потоки.

    uses Windows, Messages, KOL;
    type
    TMyThread = object( TThtead )



    пробывал так но Delphi говорит (Undeclared identifier: 'TThtead')
  • Vladimir Kladov © (04.12.07 06:23) [15]
    TThtead?

    Вообще, всё написано в книге, в комментариях. Демо есь.
  • KOLBoss © (04.12.07 08:31) [16]

    > TMyThread = object( TThtead )

    опечатка TThread надо

    > http://www.kolnmck.ru/files/demo/demothread.7z

    пример я смотрел но там не динамически

    мож тогда кто небудь сможет перевести на кол.

    http://uialexey.narod.ru/pingthread.rar
  • Vladimir Kladov © (04.12.07 11:11) [17]
    В KOL всё - динамически. Открывайте unit1_1.inc, и там процедура, в которой написано, как оно делается "статически". Пишите так же по свистку - будет динамически.
  • Дмитрий К © (04.12.07 14:16) [18]

    > мож тогда кто небудь сможет перевести на кол.

    http://dmiko.mail333.com/other/Ping.dpr
  • KOLBoss © (04.12.07 18:10) [19]

    > http://dmiko.mail333.com/other/Ping.dpr

    Большое спасибо. Хороший стил програмирования Я даже сначало неповерил что этот код может работать
    У меня 28 672 байт получилось.
 
Конференция "KOL" » Потоки [Delphi, Windows]
Есть новые Нет новых   [134431   +9][b:0][p:0.001]