Вверх ↑
Ответов: 1429
Рейтинг: 50
#1: 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