1nd1g0, а что тогда значит "@Var"?
------------ Дoбавленo в 13.54:
1nd1g0, вот, эти указатели не работают, а у nesco работают. Правда я не уверен, что они нужны. В инете в примерах их нигде нет.
------------ Дoбавленo в 14.04:
Вот код в котором критическую секцию criticalsection8:TRTLCriticalSection; приходится инициализировать каждый раз:
#pas unit hiFTCG_Tools_8EA9290;
interface
uses windows,kol,Share,hiFTCG_Tools_EM,ftcg_share;
type TClassFTCG_Tools_8EA9290 = class(TFTCG_Tools_EM) private val1:integer; name_x2:integer; result16:integer; result26:integer; criticalsection8:TRTLCriticalSection; result18:integer; result28:integer; result38:integer; result1x12:integer; result2x12:integer; result3x12:integer; result4x12:integer; result5x12:integer; result6x12:integer; result7x12:integer; result8x12:integer; result9x12:integer; val15:integer; name_x18:integer; val20:integer; name_x23:integer; val24:string; result128:integer; result1x30:string; result2x30:string; result3x30:string; result134:integer; result234:integer; resultat37:real; val40:string; resultat41:real; result1x42:string; result2x42:string; result3x42:string; result4x42:string; result5x42:string; result6x42:string; result7x42:string; result8x42:string; result9x42:string; result144:integer; result244:integer; result344:integer; res49:real; result1x50:integer; result2x50:integer; result3x50:integer; result4x50:integer; result5x50:integer; result6x50:integer; result7x50:integer; result8x50:integer; result9x50:integer; val57:integer; name_x58:integer; val59:integer; name_x60:integer; val61:integer; name_x62:integer; val63:integer; name_x64:integer; val65:integer; name_x66:integer; val67:integer; name_x68:integer; val69:integer; name_x70:integer; val71:integer; name_x72:integer; val73:integer; name_x74:integer; res81:real; name_x82:integer; resultat83:real; name_x84:integer; val85:integer; i86:integer; resultat87:real; name_x88:integer; val92:integer; resultat93:integer; val103:real; result1109:integer; result2109:integer; val110:real; result1x111:real; result2x111:real; arr114:array of array of real; val116:real; result1x117:string; result2x117:string; result3x117:string; result4x117:string; result5x117:string; result6x117:string; result7x117:string; result8x117:string; result9x117:string; name_x118:integer; resultat119:real; name_x120:integer; result1122:integer; result2122:integer; result3122:integer; val125:integer; val127:integer; result1x128:integer; result2x128:integer; result3x128:integer; result4x128:integer; result5x128:integer; result6x128:integer; result7x128:integer; result8x128:integer; result9x128:integer; name_x129:integer; resultat130:integer; name_x131:integer; resultat132:integer; val134:integer; resultat135:integer; name_x136:integer; name_x137:integer; resultat138:integer; name_x139:integer; resultat140:integer; name_x142:integer; resultat143:integer; name_x145:integer; resultat146:integer; resultat147:integer; val151:integer; res153:real; val156:integer; val160:integer; res162:real; val165:integer; resultat167:integer; result1x172:integer; result2x172:integer; result3x172:integer; result4x172:integer; result5x172:integer; result6x172:integer; result7x172:integer; result8x172:integer; result9x172:integer; resultat176:real; resultat179:real; val183:integer; result1184:integer; result2184:integer; result1185:integer; val188:real; result1x189:string; result2x189:string; result3x189:string; result4x189:string; result5x189:string; result6x189:string; result7x189:string; result8x189:string; result9x189:string; name_x190:integer; result1x191:real; result2x191:real; val195:integer; val197:real; result1x198:real; result2x198:real; res200:real; val202:integer; val203:real; result1x204:real; result2x204:real; val208:real; result1x209:real; result2x209:real; val210:real; val211:real; result1x212:real; result2x212:real; val213:real; result1x214:real; result2x214:real; result1x215:real; result2x215:real; ArrayTrack:array of array of array of string; ArrayItem:array of array of array of array of integer; ArrayProject:array of array of string; function readData(index:word):TData; function readDataInt(index:word):integer; function readDataStr(index:word):string; function readDataReal(index:word):real; public constructor Create(_Control:PControl); destructor Destroy; override; procedure event_doTimer(var Data:TData; index:word); procedure event_doGvr(var Data:TData; index:word); procedure event_doEvent1(var Data:TData; index:word); procedure event_doStart(var Data:TData; index:word); procedure event_doSort(var Data:TData; index:word); procedure data_ColorSetki(var Data:TData; index:word); end; function Create_hiFTCG_Tools_8EA9290(Control:PControl):TFTCG_Tools_EM;
implementation
uses hiFTCG_Tools;
function Create_hiFTCG_Tools_8EA9290; begin Result := TClassFTCG_Tools_8EA9290.Create(Control); end;
constructor TClassFTCG_Tools_8EA9290.Create; begin inherited Create(_Control); SetLength(doWork, 5); SetLength(getVar, 1); doWork[0] := event_doTimer; doWork[1] := event_doGvr; doWork[2] := event_doEvent1; doWork[3] := event_doStart; doWork[4] := event_doSort; getVar[0] := data_ColorSetki; val1 := 0; name_x2:=str2int(''); val15 := 0; name_x18:=str2int(''); val20 := 0; name_x23:=str2int(''); val24 := ''; val40 := ''; val57 := 0; name_x58:=str2int(''); val59 := 0; name_x60:=str2int(''); val61 := 0; name_x62:=str2int(''); val63 := 0; name_x64:=str2int(''); val65 := 0; name_x66:=str2int(''); val67 := 0; name_x68:=str2int(''); val69 := 0; name_x70:=str2int(''); val71 := 0; name_x72:=str2int(''); val73 := 0; name_x74:=str2int(''); name_x82:=str2int(''); name_x84:=str2int(''); val85 := 0; name_x88:=str2int(''); val92 := 2310753; val103 := 0; val110 := 0; val116 := 0; name_x118:=str2int(''); name_x120:=str2int(''); val125 := 0; val127 := 0; name_x129:=str2int(''); name_x131:=str2int(''); val134 := 0; name_x136:=str2int(''); name_x137:=str2int(''); name_x139:=str2int(''); name_x142:=str2int(''); name_x145:=str2int(''); val151 := 0; val156 := 0; val160 := 0; val165 := 0; val183 := 0; val188 := 0; name_x190:=str2int(''); val195 := 0; val197 := 0; val202 := 0; val203 := 0; val208 := 0; val210 := 0; val211 := 0; val213 := 0; end;
destructor TClassFTCG_Tools_8EA9290.Destroy; begin inherited Destroy; end;
function TClassFTCG_Tools_8EA9290.readData; begin dtNull(Result); _ReadData(Result, THIFTCG_Tools(FParent).Datas[index]); end;
function TClassFTCG_Tools_8EA9290.readDataInt; var dt:TData; begin dtNull(dt); _ReadData(dt, THIFTCG_Tools(FParent).Datas[index]); Result := ToInteger(dt); end;
function TClassFTCG_Tools_8EA9290.readDataStr; var dt:TData; begin dtNull(dt); _ReadData(dt, THIFTCG_Tools(FParent).Datas[index]); Result := ToString(dt); end;
function TClassFTCG_Tools_8EA9290.readDataReal; var dt:TData; begin dtNull(dt); _ReadData(dt, THIFTCG_Tools(FParent).Datas[index]); Result := ToReal(dt); end;
procedure TClassFTCG_Tools_8EA9290.event_doTimer(var Data:TData; index:word); var i5:integer; i7:integer; begin result26:= Length(ArrayTrack[0]) - 1; for i5 := 1 to result26 do begin InitializeCriticalSection(criticalsection8); result38:= Length(ArrayItem[0,0]) - 1; for i7 := 1 to result38 do begin {$A+} InterLockedExchange(result1x12, ArrayItem[1,i5,i7,0]); if result1x12 <> str2int('1') then begin {$A+} InterLockedExchange(result2x12, ArrayItem[1,i5,i7,1]); val15 := result2x12; val1 := ToInteger(Data); name_x2:=val1; if val15 <= name_x2 then begin {$A+} InterLockedExchange(result3x12, ArrayItem[1,i5,i7,2]); val20 := result3x12; if val20 >= name_x2 then begin end; end; end; end; end; end;
procedure TClassFTCG_Tools_8EA9290.event_doGvr(var Data:TData; index:word); var i38:integer; i46:integer; i47:integer; begin result128 := 1+1; SetLength(ArrayProject,result128,3); ArrayProject[1,0] := '129'; result134 := 1+1; result234 := 64+1; SetLength(ArrayTrack,result134,result234,9); Randomize; result234:= Length(ArrayTrack[0]) - 1; for i38 := 1 to result234 do begin resultat37 := (random(100)) + 0.25; val40 := double2str(resultat37); resultat41 := random(3) + 0.25; ArrayTrack[1,i38,6] := double2str(resultat41); ArrayTrack[1,i38,7] := val40; end; Randomize; //Init критической секции InitializeCriticalSection(CriticalSection8); //Старт критической секции EnterCriticalSection(CriticalSection8); result144 := 1+1; result244 := 64+1; result344 := 100+1; SetLength(ArrayItem,result144,result244,result344,9); //Конец критической секции LeaveCriticalSection(CriticalSection8); result244:= Length(ArrayItem[0]) - 1; for i46 := 1 to result244 do begin result344:= Length(ArrayItem[0,0]) - 1; for i47 := 1 to result344 do begin res49 := (i47 * 4 + i46); {$A+} InterLockedExchange(ArrayItem[1,i46,i47,0], round(0)); {$A+} InterLockedExchange(ArrayItem[1,i46,i47,1], round(res49)); {$A+} InterLockedExchange(ArrayItem[1,i46,i47,2], round(2)); end; end; val24 := ToString(Data); end;
procedure TClassFTCG_Tools_8EA9290.event_doEvent1(var Data:TData; index:word); begin end;
procedure TClassFTCG_Tools_8EA9290.event_doStart(var Data:TData; index:word); var i89:integer; i108:integer; i121:integer; begin val57 := ToInteger(readData(0)); name_x18:=val57; val59 := ToInteger(readData(1)); name_x23:=val59; val61 := ToInteger(readData(2)); name_x58:=val61; val63 := ToInteger(readData(3)); name_x60:=val63; val65 := 1; name_x62:=val65; val67 := ToInteger(readData(4)); name_x64:=val67; val69 := ToInteger(readData(5)); name_x66:=val69; val71 := ToInteger(readData(6)); name_x68:=val71; val73 := ToInteger(readData(7)); name_x70:=val73; res81 := name_x18 * 4; resultat83 := (frac(name_x68 / res81) * res81) - res81; val85 := round(resultat83); if i86 = 0 then begin _hi_onEvent(THIFTCG_Tools(FParent).Events[3], val85); end else begin end; resultat87 := (name_x23 / name_x18) / 2; for i89 := 1 to round(resultat87) do begin val92 := 4539717; resultat93 := name_x18 + val85; val85 := resultat93; if i86 = 0 then begin _hi_onEvent(THIFTCG_Tools(FParent).Events[3], val85); end else begin end; val92 := 3427130; resultat93 := name_x18 + val85; val85 := resultat93; if i86 = 0 then begin _hi_onEvent(THIFTCG_Tools(FParent).Events[3], val85); end else begin end; val92 := 4539717; resultat93 := name_x18 + val85; val85 := resultat93; if i86 = 0 then begin _hi_onEvent(THIFTCG_Tools(FParent).Events[3], val85); end else begin end; val92 := 2310753; resultat93 := name_x18 + val85; val85 := resultat93; if i86 = 0 then begin _hi_onEvent(THIFTCG_Tools(FParent).Events[3], val85); end else begin end; end; i86 := 1; val85 := 0; if i86 = 0 then begin _hi_onEvent(THIFTCG_Tools(FParent).Events[3], val85); end else begin end; i86 := 0; val103 := 0; result2109:= Length(ArrayTrack[0]) - 1; for i108 := 1 to result2109 do begin result1x111:= arr114[i108,0]; val110 := result1x111; result7x117:= ArrayTrack[name_x62,round(val110),6]; val116 := str2double(result7x117); resultat119 := round(val103 + (name_x60 * val116)); val103 := resultat119; result3122:= Length(ArrayItem[0,0]) - 1; for i121 := 1 to result3122 do begin val125 := 0; {$A+} InterLockedExchange(result3x128, ArrayItem[name_x62,i108,i121,2]); val127 := result3x128; resultat130 := (val127 * name_x18) + 1; resultat132 := round(name_x60 * val116) + 1; {$A+} InterLockedExchange(result2x128, ArrayItem[name_x62,i108,i121,1]); val134 := result2x128; resultat135 := (name_x18 * val134) - name_x18 + name_x68; resultat138 := round(resultat119 - (name_x60 * val116)) + name_x70; resultat140 := max(0, name_x23); resultat143 := max(0, name_x58); resultat146 := min(0, name_x23); resultat147 := min(0, name_x58); if resultat140 < resultat135 then begin val151 := 1; end else begin val151 := 0; end; res153 := (resultat135 + resultat130); if resultat146 > round(res153) then begin val156 := 1; end else begin val156 := 0; end; if resultat143 < resultat138 then begin val160 := 1; end else begin val160 := 0; end; res162 := (resultat138 + resultat132); if resultat147 > round(res162) then begin val165 := 1; end else begin val165 := 0; end; resultat167 := val151 + val156 + val160 + val165; if resultat167 = 0 then begin val125 := 1; if val125 = 1 then begin {$A+} InterLockedExchange(ArrayItem[name_x62,i108,i121,4], val125); {$A+} InterLockedExchange(ArrayItem[name_x62,i108,i121,5], resultat135); {$A+} InterLockedExchange(ArrayItem[name_x62,i108,i121,6], round(resultat138)); {$A+} InterLockedExchange(ArrayItem[name_x62,i108,i121,7], resultat130); {$A+} InterLockedExchange(ArrayItem[name_x62,i108,i121,8], round(resultat132)); end else begin {$A+} InterLockedExchange(ArrayItem[name_x62,i108,i121,4], val125); end; ArrayTrack[name_x62,round(val110),8] := double2str(val103); resultat176 := (resultat130 and 65535) or (resultat132 shl 16); _hi_onEvent(THIFTCG_Tools(FParent).Events[2], resultat176); resultat179 := (resultat135 and 65535) or (resultat138 shl 16); _hi_onEvent(THIFTCG_Tools(FParent).Events[1], resultat179); end; end; end; end;
procedure TClassFTCG_Tools_8EA9290.event_doSort(var Data:TData; index:word); var i186:integer; i192:integer; i196:integer; begin result2184:= Length(ArrayTrack[0]) - 1; val183 := result2184; result1185 := val183+1; SetLength(arr114,result1185,2); result1185:= Length(arr114) - 1; for i186 := 1 to result1185 do begin result8x189:= ArrayTrack[name_x62,i186,7]; val188 := str2double(result8x189); arr114[i186,0] := i186; arr114[i186,1] := val188; end; for i192 := 1 to 1410065400 do begin val195 := 0; result1185:= Length(arr114) - 1; for i196 := 1 to result1185 do begin result2x198:= arr114[i196,1]; val197 := result2x198; res200 := (i196 + 1); result1185:= Length(arr114) - 1; if res200 <= result1185 then begin val202 := round(res200); result2x204:= arr114[val202,1]; val203 := result2x204; end; if val197 > val203 then begin val195 := 1; result1x209:= arr114[i196,0]; val208 := result1x209; result2x209:= arr114[i196,1]; val210 := result2x209; result1x212:= arr114[val202,0]; val211 := result1x212; result2x212:= arr114[val202,1]; val213 := result2x212; arr114[val202,0] := val208; arr114[val202,1] := val210; arr114[i196,0] := val211; arr114[i196,1] := val213; end; end; if val195 = 1 then begin end else begin break; end; end; end;
procedure TClassFTCG_Tools_8EA9290.data_ColorSetki(var Data:TData; index:word); begin Data := _DoData(val92); end;
end.
В частности место:
------------ Дoбавленo в 14.16:
пардон!!!
Понял причину! Всё правильно, просто это пример в котором всего один раз критическая секция была.
ну почему после того как задашь вопрос на форуме, только потом доходит в чем дело
|