Вверх ↑
Ответов: 1429
Рейтинг: 50
#1: 2012-02-16 12:21:00 ЛС | профиль | цитата
1nd1g0, Заработало сразу, как только исправил! СпасибО!!!



------------ Дoбавленo в 08.44:
Неприятности, и вопрос скорее всего к Dilma:
кодогенератор отказывается печатать последний END; Останавливается на последней функции:


#hws
func Terminated_()

println (' if (1 = 1) then')
println ('begin')
return(onTerminated)
println ('end;') // это не печатает!

end
При этом эта функция последняя, и даже никуда не ведет.
onTerminated зарегистрирован в func init() как:

#hws
lng.decl_priv_var(onTerminated, 'integer')

Если сделать так:

#hws
func Terminated_()

println (' if (1 = 1) then')
println ('begin')

println ('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 (' if (Sender.Terminated = true) then')
println ('begin')
event(onStop)
println ('end;')
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')
return(onTerminated)
println ('end;')
end

if (1 = 1) - не обращайте внимание там будет другое условие

Подготовка к сборке проекта...
Генерация кода целевого языка
Компоновка проекта...
Command line: dcc32.exe "C:\Program Files\HiAsm\Elements\delphi\code\Тест Потоков FTCG.dpr" "-UC:\Documents and Settings\1\Рабочий стол\HiFT_Thread\." -Q
Borland Delphi Version 12.0 Copyright (c) 1983,98 Inprise Corporation

C:\Program Files\HiAsm\Elements\delphi\code\WinLayout.pas(159) Warning: Variable 'd' might not have been initialized

C:\Program Files\HiAsm\Elements\delphi\code\WinLayout.pas(176) Warning: Variable 'd' might not have been initialized

C:\Program Files\HiAsm\Elements\delphi\code\WinLayout.pas(40) Hint: Private symbol '_onObjDestroy' declared but never used

C:\Program Files\HiAsm\Elements\delphi\code\hiFTCG_Tools.pas(59) Hint: Variable 'PrevNeedInit' is declared but never used in 'THIFTCG_Tools.CreateInstance'

C:\Program Files\HiAsm\Elements\delphi\code\hiFTCG_Tools_8EA8B00.pas(45) Warning: Return value of function 'TClassFTCG_Tools_8EA8B00.Execute5' might be undefined

C:\Program Files\HiAsm\Elements\delphi\code\hiFTCG_Tools_8EA8B00.pas(124) Error: ';' expected but '.' found

C:\Program Files\HiAsm\Elements\delphi\code\hiFTCG_Tools_8EA8B00.pas(126) Error: Declaration expected but end of file found

C:\Program Files\HiAsm\Elements\delphi\code\hiFTCG_Tools_8EA8B00.pas(14) Hint: Private symbol 'readData' declared but never used

C:\Program Files\HiAsm\Elements\delphi\code\hiFTCG_Tools_8EA8B00.pas(15) Hint: Private symbol 'readDataInt' declared but never used

C:\Program Files\HiAsm\Elements\delphi\code\hiFTCG_Tools_8EA8B00.pas(16) Hint: Private symbol 'readDataStr' declared but never used

C:\Program Files\HiAsm\Elements\delphi\code\hiFTCG_Tools_8EA8B00.pas(17) Hint: Private symbol 'readDataReal' declared but never used

C:\Program Files\HiAsm\Elements\delphi\code\hiMainForm_8E38B90.pas(11) Fatal: Could not compile used unit 'hiFTCG_Tools_8EA8B00.pas'
Сборка завершена.


------------ Дoбавленo в 12.21:
Еще есть вопросы по потокам:

1. Два потока не могут одновременно записать в один массив, будет ошибка, а прочитать они одновременно смогут?
2. Как поставить защиту на массив(или переменную), чтобы пока один поток в него пишет, второй подождал?
карма: 0

0