| Потоки | - Synchronize |
Synchronize
Краткое описание
Компонент Synchronize позволяет выполнить событие в главном потоке визуального приложения. Применяется в многопоточных приложениях, когда требуется обратиться к визуальному компоненту (или любому другому компоненту, который обрабатывает события от визуальных компонентов) из ветки схемы, которая исполняется в параллельном потоке (например, в ветке события onExec компонента Thread).
Такое обращение без применения компонента Synchronize с очень большой вероятностью приводит к краху приложения, поскольку есть вероятность одновременного обращения к одним и тем же данным главным потоком приложения и параллельным потоком.
Такое обращение без применения компонента Synchronize с очень большой вероятностью приводит к краху приложения, поскольку есть вероятность одновременного обращения к одним и тем же данным главным потоком приложения и параллельным потоком.
Методы
События
Пример
Пример использования компонента 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
(комментарии к статье еще не добавлены)