Вверх ↑
Этот топик читают: Гость
Ответов: 1429
Рейтинг: 50
#31: 2012-02-18 17:01:28 ЛС | профиль | цитата
Dilma, поток пока не может рабоать.

Оказывается приватные переменные декларируются в той функции где был создан поток, а код пишет в другую функцию где он должен быть. Я даже понимаю почему . Просто, я не знаю, что сделать. Я менял функции местами, но тогда поток не может вызывть функцию точки. Короче может подскажите как строить такой элемент, хотябы направление.

Создает поток:

#pas
procedure TClassFTCG_Tools_8EA8F20.event_doEvent1(var Data:TData; index:word);
var
i5:integer; // сюда пишет все переменные кода который будет в потоке
i6:integer;
begin

thrd := NewThread;
thrd.OnExecute := Execute4;
thrd.AutoFree := False;
thrd.Resume;
end;

А тут выполняет код, но без переменных i он не будет работать

#pas
procedure TClassFTCG_Tools_8EA8F20.Execute4;
begin
for i5 := 1 to 3 do
begin
for i6 := i5 to 3 do
begin
end;
_hi_onEvent(THIFTCG_Tools(FParent).Events[0]);
end;
end;


#hws
func init()
fvar(e,result)
e = code(cgt.el_get_code_name(cgt.el_get_parent_id()))

fvar(old)
lng.decl_priv_var(onTerminated, 'integer')

old = block.select(BLK_PRIV_MTD)
println('thrd:PThread;')
println('function Execute',code(_id_),'(Sender:PThread):Integer;')


block.select(BLK_MTD_BODY)
println ('procedure TClass',e,'.Execute',code(_id_),';')
println ('begin')
event(onExec)

println ('end;')
block.select(old)
end



func doStart()


println('thrd := NewThread;')
println('thrd.OnExecute := Execute',code(_id_),';')
println('thrd.AutoFree := ',FastStop,';')
println('thrd.Resume;')


end



func doPause()
println('thrd.Suspend;')
end


func doResume()
println('thrd.Resume;')
end

func doStop()
println('thrd.Terminate;')
end

func Terminated_()
println (' if (1 = 1) then')
println ('begin')
println ('end;')
end

карма: 0

0
Ответов: 1429
Рейтинг: 50
#32: 2012-02-21 12:03:40 ЛС | профиль | цитата
Скажите, критическую секцию, что обязательно инициализировать перед каждым ее использованием?


#pas
InitializeCriticalSection(CriticalSection); // это каждый раз писать?
//Старт критической секции
EnterCriticalSection(CriticalSection);

// code...

//Конец критической секции
LeaveCriticalSection(CriticalSection8);


Потому, что я думал, что ее можно инициализировать один раз а потом входить в нее. Но если делаю Initialize один раз, то получаю ошибку.

карма: 0

0
Разработчик
Ответов: 26324
Рейтинг: 2147
#33: 2012-02-21 12:56:05 ЛС | профиль | цитата
login писал(а):
Скажите, критическую секцию, что обязательно инициализировать перед каждым ее использованием?

Посмотри, как реализовано в компоненте SafeMode. Инициализация там только один раз, при создании, дальше только обращение к секции. И не забудь удаление всех действующих секций. Все это там реализовано
карма: 22

0
Ответов: 1429
Рейтинг: 50
#34: 2012-02-21 13:42:07 ЛС | профиль | цитата
nesco, как удалять секции увидел, спасибо.
Плохо то, что в простом примере повтороный вход в ту-же секцию - работает:
code_26957.txt
А в реальной программе, вызывает ошибку чтения по недопустимому адресу, при том, что я тестирую всё в одном потоке.

У Вас используется некое "^", ivann, мне когда-то обьяснял, что это, но я уже забыл. И у меня такое ^ в коде, не работает.


Насколько я смог понять из логики своей программы, то если размеры массивов были изменены, то критическую секцию надо инициализировать заново.
карма: 0

0
файлы: 1code_26957.txt [1.8KB] [98]
Ответов: 3889
Рейтинг: 362
#35: 2012-02-21 13:44:53 ЛС | профиль | цитата
login, ^ - это типизированный указатель.
карма: 1

0
Ответов: 1429
Рейтинг: 50
#36: 2012-02-21 14:16:53 ЛС | профиль | цитата
1nd1g0, а что тогда значит "@Var"?
------------ Дoбавленo в 13.54:
1nd1g0, вот, эти указатели не работают, а у nesco работают. Правда я не уверен, что они нужны. В инете в примерах их нигде нет.


Add(MainForm,16392125,161,91)
{
Height=393
Color=-16777215
Position=1
link(onCreate,1669216:in1,[])
}
Add(InlineCode,1669216,224,105)
{
@Hint=#21:+ InterlockedExchange|
@Color=11184725
WorkPoints=#3:in1|
EventPoints=#4:out1|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug,windows;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|83: CriticalSection: TRTLCriticalSection; //глобальная переменная критической секции|13: r:Integer;|0:|9: public|27: out1:THI_Event; //выход|3: |55: procedure in1(var Data:TData; index:word); // Вход 1|0:|4:end;|0:|14:implementation|0:|34:procedure THiAsmClass.in1; // Вход|0:|0:|38: var Arr: array[1..2] of Integer; |5:begin|0:|13: r := 5;|18: arr[1] := 0;|23://Критические секции |8: |32: //before the threads starts|49: InitializeCriticalSection(CriticalSection^);|5: |0:|6: |26: //in the thread 1 |48: EnterCriticalSection(CriticalSection^); |8: |18: inc(r); |23: inc(arr[1]); |10: |47: LeaveCriticalSection(CriticalSection^);|8: |48: _hi_OnEvent(out1, 'CriticalSection 1'); |29: _hi_OnEvent(out1, r);|34: _hi_OnEvent(out1, arr[1]);|0:|0:|0:|9: |26: //in the thread 2 |47: EnterCriticalSection(CriticalSection); |8: |18: inc(r); |23: inc(arr[1]); |10: |46: LeaveCriticalSection(CriticalSection);|14: |48: _hi_OnEvent(out1, 'CriticalSection 2'); |29: _hi_OnEvent(out1, r);|34: _hi_OnEvent(out1, arr[1]);|0:|5: |4:end;|0:|0:|4:end.|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|0:|
link(out1,3351350:doAdd,[])
AddHint(-164,46,125,13,@Hint)
}
Add(ListBox,3351350,287,105)
{
Left=20
Top=20
Width=360
Height=325
}


------------ Д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.


В частности место:

#pas

//Init критической секции
InitializeCriticalSection(CriticalSection8);
//Старт критической секции
EnterCriticalSection(CriticalSection8);
result144 := 1+1;
result244 := 64+1;
result344 := 100+1;
SetLength(ArrayItem,result144,result244,result344,9);
//Конец критической секции
LeaveCriticalSection(CriticalSection8);
------------ Дoбавленo в 14.16:
пардон!!!

Понял причину! Всё правильно, просто это пример в котором всего один раз критическая секция была.

ну почему после того как задашь вопрос на форуме, только потом доходит в чем дело
карма: 0

0
Разработчик
Ответов: 26324
Рейтинг: 2147
#37: 2012-02-21 14:21:36 ЛС | профиль | цитата
login, в примере, при создании класса компонента, создается глобальный список критических секций, где хранятся указатели на параметры секций


var CSList: PStrListEx;

initialization CSList := NewStrListEx;

Когда другой поток пытается выйти на секцию с нужным именем, то имя ищется в списке и по найденому индексу вытаскивается указатель на параметры, откуда и нужны @ и ^, если секции не найдена, то она создается. По этим параметрам и работаю входы и выходы из секций. У тебя в примере секция создается в пределах одного класса, вот и надо ее каждый раз инициализировать. Секции надо инициализиовать в пределах всего приложения, как это сделано в компоненте
карма: 22

1
Голосовали:login
Ответов: 3889
Рейтинг: 362
#38: 2012-02-21 14:21:40 ЛС | профиль | цитата
login писал(а):
а что тогда значит "@Var"?

Нетипизированный указатель Секцию нужно было глобально объявлять.
карма: 1

0
Разработчик
Ответов: 26324
Рейтинг: 2147
#39: 2012-02-21 14:26:11 ЛС | профиль | цитата
1nd1g0 писал(а):
Секцию нужно было глобально объявлять.

Гы, опоздал
------------ Дoбавленo в 14.26:
Я с login-а балдю -- есть готовый пример, в котором все уже продумано до него, бери и делай. Нет, надо себе сложностей создать и с успехои их преодолевать
карма: 22

0
Ответов: 1429
Рейтинг: 50
#40: 2012-02-21 14:44:52 ЛС | профиль | цитата
nesco, я не могу его повторить. Слишком сложно для меня. Меня отвлекает реализация дополнительных опций и условий элемента, вроде:

#pas
FillChar(Result^, sizeof(Result^), #0);
Как только глаза такое видят, мозг забывает, что там было до этого. Этому надо учиться. А я сразу работу делаю.

[offtop]Всё, что я делаю - очень просто. Моя программа имеет очень простую логику(на уровне блондинки). Мы с Иваном делали миди-элемент, и я был удивлен, что ему не трудно сделать двойную, тройную, вложенность функций и указателей, и он продолжает понимать, что происходит в элементе, а для меня двойная вложенность это - конец работе.

Мне даже функции с параметрами дискомфортно вызывать. Я сначала обьявляю вверху переменную, потом записываю в нее значение, потом вызываю переменную внутри функции. И только так моя голова не болит.[/offtop]
карма: 0

0
Ответов: 3889
Рейтинг: 362
#41: 2012-02-21 15:04:14 ЛС | профиль | цитата
login, а что там было до этого? Вам тоже может понадобиться с PRTLCriticalSection работать, и внутренности зачищать по приведенному Вами примеру. Вы в дебри очень непростого программирования - многопоточного - ударились, я в соседней ветке предупреждал, что трюки притягивания за уши одного языка к библиотекам на другом требуют много полезного серого вещества.
карма: 1

0
Разработчик
Ответов: 26324
Рейтинг: 2147
#42: 2012-02-21 15:04:37 ЛС | профиль | цитата

FillChar(Result^, sizeof(Result^), #0);
А что тут непонтного -- очищение полей структуы RTLCriticalSection параметров секции
карма: 22

0
Ответов: 3889
Рейтинг: 362
#43: 2012-02-21 15:06:12 ЛС | профиль | цитата
[offtop]
nesco писал(а):
Гы, опоздал
nesco, квиты [/offtop]
карма: 1

0
Разработчик
Ответов: 26324
Рейтинг: 2147
#44: 2012-02-21 15:09:31 ЛС | профиль | цитата
1nd1g0, вот я про то и говорю, что описание однго ЯВУ на скрипте другого совсем непростое занятие.
------------ Дoбавленo в 15.09:
login, ты ударился в программирование многопоточности, толком не зная основных понятий объектного ЯВУ. Я понимаю, что тебе очень нужно, но хорошо бы теорию почитать не только по API, но и по объектному программированию -- типизированные и нетипизированные указатели, структуры, разновидности структур и тп
карма: 22

0
Ответов: 1429
Рейтинг: 50
#45: 2012-02-21 15:16:46 ЛС | профиль | цитата
nesco, по книжке, которую Вы мне дали, я многое, теоретически, понял. Оно у меня уже, в принципе, работает. (только, что заработало)

Обьектность я смог понять, и только благодаря ей и стало возможным сделать большую программу. Линейное, последовательное, построение смем в HiAsm не позволяет сделать что-то большое, даже мультики не спасут. Нужны обьекты и их свойства - только так.

nesco писал(а):
типизированные и нетипизированные указатели, структуры, разновидности структур
- почитаю.

nesco писал(а):
объектного ЯВУ
- что такое "Яву"?.

карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)