Make(delphi) ver(4.01 build 174) Add(MainForm,2953706,21,105) { link(onCreate,5986150:doInfo,[(100,125)(100,69)]) } Add(Button,12689665,21,168) { Left=5 Top=20 link(onClick,4009710:doEvent1,[]) } Add(InlineCode,13952310,511,168) { WorkPoints=#6:doWork| EventPoints=#6:onWork| VarPoints=#5:State| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|20: FCount:integer;|18: thList:PList;|9: public|50: procedure doWork(var Data:TData; index:word);|49: procedure State(var Data:TData; index:word);|5: end;|20: TThreadRec = record|22: timeStart:cardinal;|20: timeEnd:cardinal;|19: handle:cardinal;|5: end;|26: PThreadRec = ^TThreadRec;|0:|14:implementation|0:|33:function proc(l:pointer):Integer;|14:var i:integer;|15: r,k,p:real;|5:begin|14: Result := 0;|44: PThreadRec(l).timeStart := getTickCount();|10: k := 10;|10: p := 30;|29: for i := 0 to 2000000000 do|19: r := 200*k / p;|42: PThreadRec(l).timeEnd := getTickCount();|15: EndThread(0);|4:end;|0:|29:procedure THiAsmClass.doWork;|4:var |14: i:integer;|16: id:LongWord;|18: rc:PThreadRec;|4: |30: lpSystemInfo:_SYSTEM_INFO;|5:begin|29: FCount := ToInteger(Data);|24: if thList = nil then |22: thList := NewList|7: else|35: thList.Clear; // mem uncontrol|5: |31: GetSystemInfo(lpSystemInfo);|28: for i := 0 to FCount-1 do|9: begin|15: new(rc);|23: rc.timeEnd := 0;|57: rc.handle := BeginThread(nil, 0, proc, rc, 0, id);|87: //SetThreadAffinityMask(rc.handle, i mod lpSystemInfo.dwNumberOfProcessors + 1);|62: SetThreadPriority(rc.handle, THREAD_PRIORITY_HIGHEST); |22: thList.Add(rc);|8: end;|4:end;|0:|28:procedure THiAsmClass.State;|14:var i:integer;|14: s:integer;|5:begin|10: s := 0;|28: for i := 0 to FCount-1 do|51: if PThreadRec(thList.Items[i]).timeEnd = 0 then|12: inc(s)|55: else if PThreadRec(thList.Items[i]).handle > 0 then|11: begin|66: closeHandle(PThreadRec(thList.Items[i]).handle); |49: PThreadRec(thList.Items[i]).handle := 0;|11: end; |26: dtInteger(Data, s); |4:end;|0:|4:end.| } Add(DoData,11420909,448,168) { link(onEventData,13952310:doWork,[]) link(Data,8269455:Result,[(454,155)(337,155)(337,212)(251,212)]) } Add(TimeCounter,5588802,364,168) { link(onStart,9243158:doEvent1,[]) link(onStop,3561592:doWork3,[(410,181)]) } Add(Timer,667064,448,238) { Interval=1 Enable=1 link(onTimer,2340847:doCompare,[]) } Add(Hub,9243158,413,168) { link(onEvent1,11420909:doData,[]) link(onEvent2,667064:doTimer,[(437,181)(437,244)]) } Add(If_else,2340847,511,238) { Op2=Integer(0) link(onTrue,1189656:doEvent1,[]) link(Op1,13952310:State,[]) } Add(Hub,1189656,560,238) { OutCount=3 link(onEvent1,5588802:doStop,[(586,244)(586,212)(352,212)(352,181)]) link(onEvent2,667064:doStop,[(586,251)(586,276)(435,276)(435,251)]) link(onEvent3,16301178:doCompare,[(581,258)(581,307)]) } Add(ListBox,12557048,497,56) { Left=75 Top=20 Width=300 Height=240 } Add(Math,8269455,245,168) { OpType=9 Op1=1 ResultType=0 link(onResult,12979959:doEvent1,[]) } Add(Hub,12979959,301,168) { link(onEvent1,5588802:doStart,[]) link(onEvent2,9490999:doStrCat,[(322,181)(322,90)]) } Add(StrCat,9490999,343,84) { Str1="Threads: " link(onStrCat,3561592:doWork2,[]) } Add(HubEx,3561592,406,77) { Angle=3 link(onEvent,11360373:doWork3,[]) } Add(Counter,14325200,175,168) { Min=-1 link(onNext,8269455:doOperation,[]) } Add(Hub,4009710,70,168) { link(onEvent1,14325200:doReset,[(107,174)(107,188)]) link(onEvent2,8724473:doWork2,[]) } Add(HubEx,8724473,112,168) { link(onEvent,14325200:doNext,[(148,181)(148,174)]) } Add(If_else,16301178,588,301) { Type=1 Op2=Integer(2) link(onTrue,8724473:doWork3,[(632,307)(632,338)(116,338)]) link(Op1,14325200:Count,[(594,284)(181,284)]) } Add(Button,13716277,441,112) { Left=150 Top=275 Caption="Copy" link(onClick,4101020:doString,[]) } Add(Clipboard,9415504,553,112) { Point(PutText) } Add(FormatStr,4101020,497,112) { DataCount=1 Mask="[scode]\r\n%1\r\n[/code]" link(onFString,9415504:doPutText,[]) link(Str1,12557048:Text,[]) } Add(ProcInfo,5986150,147,63) { Query="Name,MaxClockSpeed" Point(MaxClockSpeed) link(onInfo,8100601:doString,[]) } Add(FormatStr,8100601,203,63) { Mask="%1(%2รใ๖)" link(onFString,11360373:doWork2,[]) link(Str1,5986150:Name,[(209,48)(126,48)(126,107)(160,107)]) link(Str2,5986150:MaxClockSpeed,[(216,49)(240,49)(240,107)(181,107)]) } Add(HubEx,11360373,406,56) { Angle=3 link(onEvent,12557048:doAdd,[(410,62)]) }