Вверх ↑
Пакеты 
HiAsm4
Windows 
Компоненты 
Cиcтeмa 
Потоки - Synchronize

Synchronize
Краткое описание
   Компонент Synchronize позволяет выполнить событие в главном потоке визуального приложения. Применяется в многопоточных приложениях, когда требуется обратиться к визуальному компоненту (или любому другому компоненту, который обрабатывает события от визуальных компонентов) из ветки схемы, которая исполняется в параллельном потоке (например, в ветке события onExec компонента Thread).
   Такое обращение без применения компонента Synchronize с очень большой вероятностью приводит к краху приложения, поскольку есть вероятность одновременного обращения к одним и тем же данным главным потоком приложения и параллельным потоком.
Методы
  • doSynchronize - Вызвать событие onSync в главном потоке
  • События
  • onSync - Событие происходит в главном потоке после вызова doSynchronize
  • Пример
    Пример использования компонента Synchronize:

    
    Add(Memo,13302278,735,490)
    {
    Left=100
    Top=10
    Width=85
    Height=240
    ScrollBars=2
    }
    Add(CounterEx,1719399,301,462)
    {
    Max=9
    Point(onThroughMax)
    link(onNext,16099240:doStrCat,[(354,468)(354,433)])
    link(onThroughMax,16119888:doWork,[])
    }
    Add(LineBreakEx,16119888,357,469)
    {
    Caption="clear"
    }
    Add(LineBreakEx,13833616,623,497)
    {
    Caption="clear"
    Type=1
    link(OnEvent,13302278:doClear,[])
    }
    Add(LineBreakEx,4304980,469,427)
    {
    Caption="add"
    }
    Add(LineBreakEx,8384700,679,490)
    {
    Caption="add"
    Type=1
    link(OnEvent,13302278:doAdd,[])
    }
    Add(StrCat,16099240,364,427)
    {
    Str1="A"
    link(onStrCat,5904987:doSynchronize,[])
    }
    Add(Thread,3992938,210,462)
    {
    Delay=50
    Point(doStopFlag)
    link(onExec,1719399:doNext,[])
    }
    Add(Button,799588,98,462)
    {
    Left=15
    Top=10
    Caption="Start"
    link(onClick,12865408:doEvent1,[])
    }
    Add(CounterEx,8923916,322,560)
    {
    Max=9
    Point(onThroughMax)
    link(onNext,7062715:doStrCat,[])
    }
    Add(LineBreakEx,14301643,497,560)
    {
    Caption="add"
    }
    Add(StrCat,7062715,385,560)
    {
    Str1="B"
    link(onStrCat,5116873:doSynchronize,[])
    }
    Add(Thread,7152366,210,560)
    {
    Delay=80
    Point(doStopFlag)
    link(onExec,8923916:doNext,[])
    }
    Add(Hub,12865408,140,462)
    {
    link(onEvent1,3992938:doStart,[])
    link(onEvent2,7152366:doStart,[(196,475)(196,566)])
    }
    Add(Button,13249085,98,567)
    {
    Left=15
    Top=45
    Caption="Stop"
    link(onClick,8579939:doEvent1,[])
    }
    Add(Hub,8579939,147,567)
    {
    link(onEvent1,3992938:doStopFlag,[(185,573)(185,482)])
    link(onEvent2,7152366:doStopFlag,[])
    }
    Add(Synchronize,5116873,448,560)
    {
    link(onSync,14301643:doWork,[])
    }
    Add(Synchronize,5904987,420,427)
    {
    link(onSync,4304980:doWork,[])
    }
    Add(InfoTip,15786345,196,91)
    {
    Info=#33:Применение компонента Synchronize|
    Font=[MS Sans Serif,8,1,0,1]
    Width=337
    Height=18
    }
    Add(InfoTip,1756140,196,133)
    {
    Info=#31:Компонент Synchronize позволяет|31:безопасно обратиться (изменить)|45:интерфейсный элемент из параллельных потоков.|0:|43:Если в данном примере компонент Synchronize|43:убрать, то кроме возможного краха программы|44:также наблюдаются артефакты добавления строк|49:в список - некоторые строки могут быть склееными.|0:|42:Используйте компонент только в тех местах,|49:где нужно. Иначе чрезмерное применение компонента|44:загружает интерфейсный поток, что приводит к|49:видимым тормозам в приложении и нивелирует эффект|38:от использования параллельных потоков.|0:|
    Width=337
    Height=207
    }
    BB-code статьи для вставки
    Всего комментариев: 0
    (комментарии к статье еще не добавлены)
    Комментарий
    ...