Aziz писал(а):
или ему кратное?Ему кратное будет создавать потоки в тех процессорах, которые уже заняты предыдущими. Это не имеет смысла, проще разбить задачу на куски, а куски разбить на кол-во процессоров. В этом случае, каждый кусок будет выполняться мультипроцессорно, но последовательно кусок за куском.
Вот тебе пример, как организовано мультипоточное сканирование диапазона IP-адресов:
ScanIP
Add(MainForm,2953706,105,168)
{
Width=395
Height=395
Caption="-= ScanIP =-"
Position=1
}
Add(Edit,4680663,308,168)
{
Left=55
Top=10
Width=125
Text="192.168.1.0"
}
Add(Label,15265933,98,112)
{
Left=10
Top=12
Width=42
Height=17
Caption="Start IP:"
Alignment=1
}
Add(Edit,16340481,518,168)
{
Left=245
Top=10
Width=125
Text="192.168.1.255"
}
Add(Label,2156216,105,119)
{
Left=203
Top=12
Width=39
Height=17
Caption="End IP:"
Alignment=1
}
Add(MTStrTbl,12744077,161,168)
{
Left=10
Top=40
Width=360
Height=280
Font=[MS Sans Serif,8,1,0,1]
Name="table_IP"
Columns=#4:N=37|12:IP-адрес=200|13:Состояние=100|
ColorItems=0
}
Add(Button,14940173,105,224)
{
Left=160
Top=330
TabOrder=-1
Caption="ScanIP"
Point(doEnabled)
link(onClick,10765232:doEvent1,[])
}
Add(MultiStrPart,1535533,308,224)
{
Char="."
Count=4
link(onSplit,7134467:doConvert,[(347,230)(347,160)(263,160)(263,300)])
link(Str,4680663:Text,[])
}
Add(ConvertorEx,7134467,273,294)
{
Mode=6
link(onResult,16218166:doConvert,[])
link(Data,1535533:Part1,[(279,264)(314,264)])
}
Add(ConvertorEx,16218166,315,294)
{
Mode=6
link(onResult,7324999:doConvert,[])
link(Data,1535533:Part2,[])
}
Add(ConvertorEx,7324999,357,294)
{
Mode=6
link(onResult,14151681:doConvert,[])
link(Data,1535533:Part3,[(363,285)(328,285)])
}
Add(ConvertorEx,14151681,399,294)
{
Mode=6
link(onResult,10593432:doStrCatDlm,[(438,300)(438,398)(291,398)(291,363)])
link(Data,1535533:Part4,[(405,278)(335,278)])
}
Add(StrCatDelim,10593432,301,357)
{
Point(Delimiter)
link(onStrCatDlm,15488589:doStrCat,[])
link(Str1,7134467:Var,[(307,348)(279,348)])
link(Str2,7324999:Var,[(314,334)(363,334)])
link(Delimiter,16218166:Var,[])
}
Add(StrCat,15488589,392,357)
{
link(onStrCat,7359826:doSplit,[(459,363)(459,230)])
link(Str2,14151681:Var,[])
}
Add(MultiStrPart,7359826,518,224)
{
Char="."
Count=4
link(onSplit,63245:doConvert,[(557,230)(557,160)(473,160)(473,300)])
link(Str,16340481:Text,[])
}
Add(ConvertorEx,63245,483,294)
{
Mode=6
link(onResult,11792885:doConvert,[])
link(Data,7359826:Part1,[(489,264)(524,264)])
}
Add(ConvertorEx,11792885,525,294)
{
Mode=6
link(onResult,8141778:doConvert,[])
link(Data,7359826:Part2,[])
}
Add(ConvertorEx,8141778,567,294)
{
Mode=6
link(onResult,11267527:doConvert,[])
link(Data,7359826:Part3,[(573,285)(538,285)])
}
Add(ConvertorEx,11267527,609,294)
{
Mode=6
link(onResult,7224005:doStrCatDlm,[(648,300)(648,412)(501,412)(501,363)])
link(Data,7359826:Part4,[(615,278)(545,278)])
}
Add(StrCatDelim,7224005,511,357)
{
Point(Delimiter)
link(onStrCatDlm,14920638:doStrCat,[])
link(Str1,63245:Var,[(517,348)(489,348)])
link(Str2,8141778:Var,[(524,334)(573,334)])
link(Delimiter,11792885:Var,[])
}
Add(StrCat,14920638,602,357)
{
link(onStrCat,6463665:doConvert,[(641,363)(641,405)(382,405)(382,440)])
link(Str2,11267527:Var,[])
}
Add(ConvertorEx,6463665,392,434)
{
Mode=5
link(onResult,9075156:doConvert,[])
link(Data,15488589:Result,[])
}
Add(ConvertorEx,9075156,602,434)
{
Mode=5
link(onResult,11963140:doCompare,[])
link(Data,14920638:Result,[])
}
Add(For,15538997,875,441)
{
link(onEvent,11342479:doOperation,[])
link(End,13537371:Result,[(888,432)(867,432)(867,474)(776,474)])
}
Add(GetDataEx,16748363,753,495)
{
Angle=3
link(Data,11070075:Var3,[])
}
Add(ConvertorEx,9472997,980,441)
{
Mode=6
link(onResult,11261530:doEvent1,[])
}
Add(Math,11342479,931,441)
{
ResultType=0
link(onResult,9472997:doConvert,[])
link(Op1,16748363:Var3,[(937,432)(923,432)(923,500)])
}
Add(MathParse,13537371,770,434)
{
MathStr="abs(%2 - %1)"
ResultType=0
link(onResult,8207842:doEvent1,[])
link(X1,16748363:Var1,[(776,425)(759,425)])
link(X2,9075156:Var,[(783,418)(657,418)(657,474)(608,474)])
}
Add(Str_Enum,6856085,1064,448)
{
Delimiter=""
Step=2
link(onEnum,7821165:doConvert,[])
link(onEndEnum,5883256:doTrim,[(1117,461)(1117,538)])
}
Add(ConvertorEx,7821165,1127,448)
{
Mode=5
link(onResult,5775142:doConvert,[])
}
Add(ConvertorEx,5775142,1176,448)
{
Digits=3
link(onResult,2739520:doStrCatDlm,[])
}
Add(Hub,11261530,1029,441)
{
link(onEvent1,2739520:doClear,[(1054,447)(1054,440)(1215,440)(1215,461)])
link(onEvent2,6856085:doEnum,[])
}
Add(StrCatDelim,2739520,1232,448)
{
Delimiter="."
Point(doClear)
link(Str1,2620208:Var3,[(1238,439)(1273,439)(1273,488)])
}
Add(GetDataEx,2620208,1232,483)
{
link(Data,2739520:Result,[])
}
Add(Trim,5883256,1232,532)
{
Char="."
Point(Result)
link(onTrim,7266221:doOperation,[])
link(Text,2620208:Var2,[])
}
Add(If_else,11963140,665,434)
{
Type=4
link(onTrue,13537371:doCalc,[])
link(onFalse,10452294:doMessage,[(704,447)(704,531)])
link(Op2,11070075:Var1,[(678,425)(748,425)])
}
Add(GetDataEx,11070075,742,495)
{
Angle=3
link(Data,6463665:Var,[(398,500)])
}
Add(Hub,8207842,812,434)
{
link(onEvent1,15218441:doClear,[(837,440)(837,391)])
link(onEvent2,15538997:doFor,[])
}
Add(Message,10452294,770,525)
{
Message="Конечный адрес должен\r\nбыть больше или равен стартовому"
Caption="-= ScanIP =-"
Icon=1
}
Add(StyleXP,14807685,161,119)
{
}
Add(CPUUsage,2563624,287,532)
{
}
Add(For,7653720,280,658)
{
IncludeEnd=1
link(onEvent,3802824:doEvent,[])
link(End,8969116:Var2,[])
}
Add(If_else,4127224,315,602)
{
link(onTrue,10461961:doReset,[])
link(onFalse,10461961:doOn,[])
link(Op1,5275191:##count,[(321,586)(405,586)(405,698)(447,698)])
}
Add(IndexToChanel,3802824,364,658)
{
Point(Index)
link(onEvent1,5275191:##add,[])
link(onEvent2,5275191:##select,[])
link(Index,10461961:State,[])
}
Add(Switch,10461961,364,595)
{
DataOn=Integer(1)
DataOff=Integer(0)
Point(State)
Point(doOn)
}
Add(GetDataEx,8969116,287,574)
{
link(Data,2563624:CPUCount,[])
}
Add(MultiElementEx,5275191,441,658)
{
@Hint=#18:MultiThread ScanIP|
Mode=1
link(onResult,8453156:doEvent1,[])
link(Array,8384296:Var2,[])
link(ThreadCount,8969116:Var3,[(454,579)])
link(EndIdx,3980825:EndIdx,[])
AddHint(57,-53,109,13,@Hint)
}
BEGIN_SDK
Add(EditMultiEx,6858109,14,14)
{
WorkCount=#5:##add|8:##select|
EventCount=#8:onResult|0:|
VarCount=#7:##count|4:Busy|
DataCount=#5:Array|11:ThreadCount|6:EndIdx|
Width=929
Height=396
VOffset=175
HOffset=14
Point(##add)
Point(##select)
Point(##count)
link(##add,4662741:doEvent1,[])
link(##select,4662741:doEvent2,[])
link(Busy,9458643:Busy,[(41,397)(237,397)])
}
Add(MT_Memory,79893,350,56)
{
link(onData,10875778:doSeparateMT,[])
}
Add(MT_AddData,3049757,679,273)
{
Count=4
link(onAdd,3283037:doValue,[])
link(Data1,12973651:Value1,[])
link(Data2,12973651:Value2,[])
link(Data3,15645917:Value,[(699,229)(741,229)])
link(Data4,1142509:Value,[(706,257)(636,257)])
}
Add(MT_MultiMem,12973651,679,189)
{
Count=4
Point(Data)
link(onData,3049757:doAdd,[(725,195)(725,314)(669,314)(669,279)])
link(Data,79893:Value,[(685,180)(356,180)])
}
Add(Memory,1142509,630,189)
{
link(onData,12973651:doValue,[])
}
Add(MT_Memory,3283037,749,273)
{
}
Add(SelectColor,10220941,504,56)
{
Color=11138509
link(onColor,9147621:doEvent1,[])
}
Add(SelectColor,6257194,504,98)
{
Color=12036852
link(onColor,4672522:doEvent1,[])
}
Add(HubEx,12944225,609,105)
{
Angle=1
link(onEvent,1142509:doValue,[(613,195)])
}
Add(Icon,12825104,119,189)
{
@Hint=#5:#main|
Icon=[ZIP9E09000078DA85960B5C8E771BC7AFFB793A90BDF62EAD37869943C9F44179FBCC71CA719A7DD89CD6C8184BB3CA2A858C281FAC19D23B8758A15E2D626528A488529E4E9E9ACE079188464B87E73EFCDEEB8E0C9F779F5DCFE77AFECF73DFFFFB7B5DF775B8AF9B48E08F9515F1773FDADA95C8928806B3F2211A4E4F8FABF27957FA5BD108A4659ED0F9BF7B17B2E86F41EF0DB412A60EED2938F57983AC8D0432E93C2F688CB41D3FB43DCCC9EC3DE7674785BF62ABAB9186BA4C184C0B7E58F046F2A50D360F2AFE3346F92DF85DFCFAAD23F2BEB76F3D12605FECE36A176E6B410E1DEEABD27B5D1839E844327AA77FA7E5FFC71ED19726C67858943D8E180DE9E014E5D18EF7712F74022ADC2D95A04387919D7F01FAA865A89380F6FA7CFCB46E5CAC99A55B284DBE0F8D07A019B425E6195EF32ADBD9963C4ABFB306A2A6A07683BD58E03548CAF71AA4E8570F47DE2C2DBCFE1B8BCB80F2EB7677393D72B5585E9625FB87168046668316CBB2B01230F9B24226CD108767644D277BF4409A53116A0339629254F48DB574C37B102A57D9A02AC016B7DC4C10B9D4011FE6FE8E0200FA681FDCF2EB8B0FC6AC02D964481AB73689D877725744D31D7C0F4336EEE94C8EBA98BF4696493E9675889C8422DFC17291AF2D0A97F7C4198FA14874B7C356FFF91876FE1636DC07EE1A5A7124D01D76A30E80C6D4C068B1011DECAF593D64C5781760FAC5D53AAE8CD73BE3F3F91861BD1839160D21F66289777F946C7084CECD1C1FC65E80A3AE0D2E250604D74BC862DFD74714817A254318590DCD8216D07285D9AC1C1B5AA940B319B2D9AE472093F7A775949540C6475758E995CDD638B7B89F7C21D019752B7BA3FA3353CC8E39834D8F80734F9A91DAD68E9BCC3F937317413EDF61E627113019710134B30EE4C76C3F05C2B7CCDFA888AFC5708CDEF60856F9037B09230BFCDE94CE7FDA0BCE093A8CBFDA80C5E1BBE1BF7915C69CC8866BA98474433B520C227221A3B61DA84D5903E5EC42F41B751CF4E96368D632DF1FE876428251F413C9F812A01D179EA8F2270D335E943397306F5FB4FC05C7F7C7070684FE017837007E7532120D0A8AD9EF0A05E0D3286E52509010045D9827C83E1B82AF0C5AC37E6FE3B887DDC3BFE79F9047AECD80C67E7F8ECAFFC89A02A23987A375AD52628B04BDA2A00812AAD8D7B29636A414E6A2B0AA0485A57A645FFC19E9E14B21C6CCC0D2793B412EF530DAC4BEAF661B11404FFF2264E756CAF5FA33D8EB3DADCC58A02E9F0C20DFE08D8B30B104D2C5D636C435B722A55D828EED94B3BF178E87A17893236A0E2DC383936B806B1B712E7C1BFB7E0514C8EC2005DACDBCEE6D82D33A1D9AB83F7E6B7888DC23AE6D7DBB93ED546B9A7D78A503C65E6F91CFB68938DB664016B3AFCA120AD55AAFA9C2CD1F66A03E6C3A94C425D0C76C81D5886320AF76082A375086491CAF2BF2B025FD361EAAB1AC2D57AA4F0560400F9AD8C7926CB23CFFF1646E6C12C29AA164496DC8942454F2BE7AD69A5619C5D15F428E9C8AC35E4B60E19800F26C87269899EB6598325B1B5401DBC05CE4F0FE8CAA5AE8AFC52935670231C09CA6A8398872EB7A3977CF1C7C56D028D7F09E16D6874DD5A82FFA0599C93FE1C88600CC9A1B059A5A0A4D00D7DE16D6DDACB15CF76B2B61B5E8343EBED1D85107B90F1FA1BCD980F349FBA581E664AFF25D866BDCDBC36D71F5D057626A69092E25446093DB522C1CF7157A8F66EECC2AAE6FCE6118FB1CCEB5B2BB19B4F916FA7AE760CDD14A6C6A90F0FD3DB1E3D9912D894A2BAF79493FDE3623FAA7CA3733A16E712B2C4A11351EED07C7CB8FB639C0D9FB18DE5C5989A19E37F1EEAA520CF0CCC270F75318E69E00F3800238ED2BC3E5C656A441C14DAE5D95AD63CD1439B82CBBFD5D8EBDF8EC1C6B4D736AB7DBE276D874F164A41FB24EF96357463C122519190619F999A781231FE17E942B9CD2ABE1D3A032659C6E31E068532BAEF2BEEB8AACD68424351663F250D359CF67D0331BDF38D1EE937B16C2B7E84EFBE9A616E5CADEE5082D2CE2BEE53ACA8C05E26703B11F6379DC49F8DE06EAB84F0A6405C95C733ABE8F74D120AAB139B17D51C62BA34B1D68EA98D5ACFF807EBE1B351DA985D7C5EC8410A9F8B8170AAFC4E0CE69AEFDB32B80534BB03D6E3F9CB8397636CAD8FF18B828B27D5912B9ED517EF940B3758FA779E5D83C9F312A9F45C38684E5CEA6DBCB0ECE8092C60D94B858C2E149A2727CBE2C5EDB09247F8DFC783F2C4D4AC5DCE46BCABC2B156258C93DB1F2F7872849DBD73CAABF76DAD3C922685F9DBFAA8DCE7C0CEF43130FF8D8E5DD495A0DDCD8A72087D91921403A376C668882BC1D502AE3813BE794C6D48D085DD63FE36D731AF257EC976D3C3DCFEF095AFBDE3475EDBC5ED1BF84CEA8D2C7FB18AACF87A02A652B0A13D74A67C366D705B9BE153FE22D7251B17FC77E69DE6B7834BC30A34D0532EBD79DECB82727A97DF9CEEB646F2650F73F13F8E7AC7D51FED0BA503D4DA67C32A6287661026B10DF4550C76BC78BFAB2043D5781AF11F85A2DFFD6501A736E53376AA27F91949647FF03FE72B73E]
}
Add(MT_Add,13302288,616,329)
{
InputMT=2
link(onAdd,212720:doEvent1,[])
link(Data,3283037:Value,[(622,320)(755,320)])
}
Add(Thread,9458643,231,322)
{
Delay=0
FastStop=0
BusyEvent=1
link(onExec,10368609:doAdd,[(270,328)(270,62)])
link(onSyncExec,13302288:doAdd,[])
}
Add(MT_MTArrayRW,6689186,175,322)
{
link(onRead,9458643:doStart,[])
link(Array,6858109:Array,[(181,229)(34,229)])
link(Index,5424527:Value,[(188,278)(202,278)])
}
Add(Hub,5752383,49,238)
{
link(onEvent1,8153238:doWork2,[])
link(onEvent2,16598786:doWork1,[(81,251)])
}
Add(HubEx,8153238,91,238)
{
link(onEvent,5424527:doValue,[])
}
Add(Hub,212720,665,329)
{
link(onEvent1,6858109:onResult,[(893,335)(893,195)])
link(onEvent2,15037475:doSeparateMT,[(690,342)(690,349)])
}
Add(If_else,6054776,847,343)
{
Type=3
link(onTrue,5752383:doEvent1,[(893,349)(893,391)(32,391)(32,244)])
link(onFalse,7601448:doEvent1,[(886,356)(886,384)(39,384)(39,279)])
link(Op2,6858109:EndIdx,[(860,33)(48,33)])
}
Add(MT_MultiData,15037475,700,343)
{
Count=1
Point(Data)
link(onData1,12268052:doOperation,[])
}
Add(Hub,4662741,49,189)
{
InCount=2
OutCount=3
link(onEvent1,8153238:doWork1,[(95,195)])
link(onEvent2,2721395:doReset,[(88,202)(88,272)])
link(onEvent3,11900908:doWork1,[(102,209)])
}
Add(Memory,5424527,196,238)
{
}
Add(Hub,7601448,49,273)
{
link(onEvent1,2721395:doOn,[])
link(onEvent2,16598786:doWork2,[])
}
Add(HubEx,16598786,77,280)
{
Angle=1
link(onEvent,11900908:doWork2,[(81,328)])
}
Add(MT_Add,10368609,301,56)
{
InputMT=2
link(onAdd,79893:doValue,[])
link(Data,6689186:Item,[(307,47)(293,47)(293,362)(181,362)])
}
Add(Math,12824464,798,343)
{
ResultType=0
link(onResult,6054776:doCompare,[])
link(Op1,6858109:ThreadCount,[(804,40)(41,40)])
}
Add(Math,12268052,749,343)
{
OpType=1
Op2=1
ResultType=0
link(onResult,12824464:doOperation,[])
}
Add(IndexToChanel,6556928,119,322)
{
Point(Index)
link(onEvent1,6689186:doRead,[])
link(onEvent2,9458643:doStop,[(165,335)(165,370)(214,370)(214,335)])
link(Index,2721395:State,[])
}
Add(Switch,2721395,119,259)
{
DataOn=Integer(1)
DataOff=Integer(0)
Point(State)
Point(doOn)
}
Add(HubEx,11900908,98,322)
{
link(onEvent,6556928:doEvent,[])
}
Add(Ping,3551483,448,56)
{
Name=""
TimeOut=200
link(onFind,10220941:doColor,[])
link(onFailed,6257194:doColor,[(494,69)(494,104)])
}
Add(MT_MultiData,10875778,399,56)
{
From=1
Count=1
Point(Data)
link(onData1,3551483:doPing,[])
}
Add(Hub,9147621,560,56)
{
link(onEvent1,11310484:doText,[])
link(onEvent2,12944225:doWork1,[(613,69)])
}
Add(Hub,4672522,560,98)
{
link(onEvent1,12555095:doText,[])
link(onEvent2,12944225:doWork2,[])
}
Add(Memory,15645917,735,56)
{
Default=String()
}
Add(VisualStrings,12555095,637,98)
{
Lines=#9:не в сети|
Width=67
Point(doText)
Point(onText)
link(onText,3902690:doWork3,[(718,104)])
}
Add(VisualStrings,11310484,637,56)
{
Lines=#6:в сети|
Width=67
Point(doText)
Point(onText)
link(onText,3902690:doWork2,[])
}
Add(HubEx,3902690,714,56)
{
link(onEvent,15645917:doValue,[])
}
END_SDK
Add(MST_ArrayRows,3980825,441,532)
{
MSTControl="table_IP"
}
Add(MST_Clear,15218441,875,385)
{
MSTControl="table_IP"
}
Add(MT_AddData,6328198,1344,532)
{
Count=4
link(onAdd,1881603:doRowAction,[])
link(Data1,7266221:Result,[(1350,523)(1336,523)(1336,572)(1287,572)])
link(Data2,5883256:Result,[(1357,516)(1273,516)(1273,572)(1238,572)])
link(Data3,9564505:Var2,[])
link(Data4,9564505:Var3,[(1371,516)])
}
Add(VisualStrings,898013,1358,469)
{
}
Add(MST_RowAction,1881603,1407,532)
{
MSTControl="table_IP"
}
Add(GetDataEx,9564505,1358,511)
{
link(Data,898013:Text,[])
}
Add(Math,7266221,1281,532)
{
Op2=1
ResultType=0
link(onResult,6328198:doAdd,[])
link(Op1,15538997:Position,[(1287,523)(881,523)])
}
Add(Hub,10765232,154,224)
{
OutCount=6
link(onEvent1,1535533:doSplit,[])
link(onEvent2,2455176:doClear,[(221,237)(221,825)(648,825)(648,797)])
link(onEvent3,15630150:doClear,[(214,244)(214,867)])
link(onEvent4,4127224:doCompare,[(206,251)(206,608)])
link(onEvent5,7653720:doFor,[(197,258)(197,664)])
link(onEvent6,11483898:doWork1,[(179,265)(179,279)(39,279)(39,230)])
}
Add(MT_MTArrayRW,14181587,742,651)
{
link(Array,8384296:Var3,[(748,586)])
link(Value,12484307:Value,[(762,642)(783,642)(783,698)(552,698)])
}
Add(MT_MultiData,15588294,602,658)
{
Count=1
Point(Data)
link(onData1,14365932:doOperation,[])
}
Add(Math,14365932,651,658)
{
OpType=1
Op2=1
ResultType=0
link(onResult,8181997:doEvent1,[])
}
Add(MT_Memory,12484307,546,658)
{
link(onData,15588294:doSeparateMT,[])
}
Add(GetDataEx,8384296,441,581)
{
link(Data,3980825:Strings,[])
}
Add(MST_SelectRow,5399022,742,707)
{
AutoMakeVisible=1
MSTControl="table_IP"
Point(doEnsureVisible)
}
Add(Hub,8181997,707,658)
{
link(onEvent1,14181587:doWrite,[])
link(onEvent2,4691629:doWork1,[(732,671)])
}
Add(HubEx,4691629,728,714)
{
link(onEvent,5399022:doEnsureVisible,[])
}
Add(Message,14007161,833,917)
{
Message="Сканирование завершено"
Caption="-= ScanIP =-"
Point(onOK)
link(onOK,11483898:doWork2,[(872,930)(872,958)(32,958)(32,237)])
}
Add(Math,2455176,721,784)
{
Op2=1
ResultType=0
Point(doClear)
link(onResult,855236:doWork1,[(844,790)])
link(Op1,10367022:Var1,[(727,775)(713,775)(713,824)])
}
Add(MT_MultiData,7216782,546,784)
{
From=2
Count=1
Point(Data)
link(onData1,3490678:doCompare,[])
}
Add(If_else,3490678,602,784)
{
Type=5
Op2=String(в сети)
link(onTrue,2455176:doOperation,[])
link(onFalse,15630150:doOperation,[(641,797)(641,860)])
}
Add(Math,15630150,686,854)
{
Op2=1
ResultType=0
Point(doClear)
link(onResult,855236:doWork2,[])
link(Op1,9521800:Var1,[(692,845)(678,845)(678,894)])
}
Add(GetDataEx,10367022,721,819)
{
link(Data,2455176:Result,[])
}
Add(GetDataEx,9521800,686,889)
{
link(Data,15630150:Result,[])
}
Add(If_else,3076957,749,910)
{
link(onTrue,4001312:doEvent1,[])
link(Op2,15349392:Var2,[])
}
Add(Math,9601970,686,910)
{
ResultType=0
link(onResult,3076957:doCompare,[])
link(Op1,9521800:Var2,[])
link(Op2,10367022:Var2,[(699,901)(727,901)])
}
Add(Hub,8453156,490,658)
{
OutCount=3
link(onEvent1,12484307:doValue,[])
link(onEvent2,7216782:doSeparateMT,[(522,671)(522,790)])
link(onEvent3,9601970:doOperation,[(515,678)(515,916)])
}
Add(ChanelToIndex,11483898,49,224)
{
link(onIndex,14940173:doEnabled,[])
}
Add(Hub,4001312,798,910)
{
link(onEvent1,15622533:doTimer,[(823,916)(823,769)(592,769)(592,720)])
link(onEvent2,14007161:doMessage,[])
}
Add(Timer,15622533,602,714)
{
Interval=200
Enable=1
AutoStop=1
link(onTimer,14011449:doData,[])
}
Add(DoData,14011449,651,714)
{
link(onEventData,4691629:doWork2,[])
link(Data,5399022:EndIdx,[(657,705)(720,705)(720,747)(769,747)])
}
Add(StatusBar,7525024,903,854)
{
}
Add(FormatStr,6653776,854,854)
{
DataCount=3
Mask="Всего: %3; в сети: %1; не в сети: %2 "
link(onFString,7525024:doText,[])
link(Str1,9521800:Var3,[(860,845)(818,845)(818,894)])
link(Str2,10367022:Var3,[(867,824)])
link(Str3,15349392:Var3,[(874,754)])
}
Add(HubEx,855236,840,854)
{
link(onEvent,6653776:doString,[])
}
Add(GetDataEx,15349392,756,749)
{
link(Data,5399022:Count,[])
}
Обрати внимание, что результат считывается в синхронном с основным потоком режиме и не мешает самим потокам. И еще учти то, что ни в коем случае не используй асинхронный режим работы (точка onExec) для вывода результата на визуальные элементы.
Леонид писал(а):
проходя мимо задержитесь здесьЯ постоянно читаю форум, но не пишу на нем, по вполне понятным причинам. Тч, я никуда пока не уходил полностью.