Вот две програмки суть которых показать глюк, смысла внутри немного. Первая сервер построенный на основе ServerEx, к нему подключается клиент, сервер закрывает это подключение. Если замкнуть onRead внутри ServerEx на doClose, то все работает, если же между этими точками есть некоторое количество компанентов, начиная с простого Hub, то вылетают ошибки при закрытии Exception или Self destruction not allowed!!! Проблема ошибок решается установкой перед точкой doClose параллельного потока, но в этом серверная прога начинает жрать память, причем вплоть до ошибки Out of memory! Видимо такое рашение неправильно и надо понять причину ошибок. У меня не хватает знаний разобраться... Может вы поможите.
Не могу файл добавить - пишет у вас не хватает прав, так что код в текст вложил.
------------------------
Сервер:
Make(delphi)
ver(4.04 build 182)
Add(MainForm,2953706,189,49)
{
link(onCreate,7183488:##open,[])
}
Add(TCP_ServerEx2,7183488,266,63)
{
ServerPort=8081
}
BEGIN_SDK
Add(EditMultiEx,15085026,21,21)
{
WorkCount=#6:##open|
Width=643
}
Add(TCP_Connection,8142414,63,56)
{
link(onRead,11366045:doEvent1,[])
}
Add(Memory,1697652,406,56)
{
link(onData,14110773:doSearch,[])
}
Add(Position,14110773,455,56)
{
@Hint=#68:Îòñëåæèâàåì çàïðîñ ajax è ïîñûëàåì îòâåò, íó è/èëè âûïîëíÿì äåéñòâèÿ|
Target="ajax_"
ZeroPos=0
ShortSearch=1
link(onSearch,1925181:doCompare,[])
}
Add(If_else,1925181,525,56)
{
Op2=Integer(0)
link(onTrue,9067877:doWork1,[(571,62)])
link(onFalse,9067877:doWork2,[])
}
Add(BlockFind,6091776,210,56)
{
IncludeBlock=1
StartBlock="GET"
EndBlock="HTTP"
Point(onNotFind)
link(onSearch,9873233:doWork2,[])
link(onNotFind,4106439:doSearch,[])
}
Add(BlockFind,4106439,266,70)
{
IncludeBlock=1
StartBlock="POST"
EndBlock=" HTTP"
Point(onNotFind)
link(onSearch,9873233:doWork3,[(312,76)])
}
Add(Memory,1242222,154,56)
{
link(onData,6091776:doSearch,[])
}
Add(HubEx,9873233,308,56)
{
link(onEvent,14263935:Ïðåîáðàçóåìàÿ ñòðîêà,[])
}
Add(MultiElementEx,14263935,350,56)
{
@Hint=#44:Ïîäìåíÿåò ñèìâîëû %xx íà yyy (â äåñÿòè÷íîì)|0:|
link(onÐåçóëüòàò,1697652:doValue,[])
}
BEGIN_SDK
Add(EditMultiEx,10489684,21,21)
{
WorkCount=#20:Ïðåîáðàçóåìàÿ ñòðîêà|
EventCount=#11:onÐåçóëüòàò|
Width=811
Height=466
link(Ïðåîáðàçóåìàÿ ñòðîêà,14978128:doEvent1,[(122,27)(122,90)])
}
Add(Position,7628536,238,147)
{
Target="%"
link(onSearch,8474613:doOperation,[])
link(Str,746716:Var2,[])
}
Add(Memory,994251,238,70)
{
link(onData,2503393:doWork1,[(282,76)(282,113)(214,113)])
}
Add(Copy,1122981,336,147)
{
Count=2
link(onCopy,4242220:doEvent1,[])
link(Str,746716:Var3,[(342,131)])
link(Position,8474613:Result,[(349,135)(317,135)(317,191)(286,191)])
}
Add(Convertor,12046194,511,147)
{
Mode=5
link(onResult,7248258:doConvert,[])
}
Add(Replace,828282,665,147)
{
link(onReplace,686649:doWork3,[(702,153)(702,115)(226,115)])
link(Str,8099385:Var3,[(671,117)])
link(Sub_str,16732278:Value,[(678,127)(506,127)(506,205)(468,205)])
}
Add(Memory,16732278,462,161)
{
}
Add(GetDataEx,8099385,238,112)
{
link(Data,994251:Value,[])
}
Add(Hub,4242220,378,147)
{
link(onEvent1,2354332:doStrCat,[(401,153)(401,167)])
link(onEvent2,12046194:doConvert,[(406,160)(406,153)])
}
Add(StrCat,2354332,413,161)
{
Str1="%"
link(onStrCat,16732278:doValue,[])
}
Add(HubEx,686649,222,84)
{
Angle=3
link(onEvent,994251:doValue,[(226,76)])
}
Add(Hub,14978128,140,84)
{
OutCount=3
link(onEvent1,686649:doWork2,[])
link(onEvent2,2503393:doWork2,[(196,97)(196,153)])
link(onEvent3,12731517:doData,[(175,104)(175,251)])
}
Add(Math,8474613,280,147)
{
Op2=1
ResultType=0
link(onResult,1122981:doCopy,[])
}
Add(GetDataEx,746716,238,126)
{
link(Data,8099385:Var2,[])
}
Add(Convertor,7248258,553,147)
{
Mode=4
link(onResult,828282:doReplace,[])
}
Add(DoData,12731517,182,245)
{
link(onEventData,10489684:onÐåçóëüòàò,[(541,251)(541,27)])
link(Data,8099385:Var1,[(188,117)])
}
Add(HubEx,2503393,210,147)
{
link(onEvent,7628536:doSearch,[])
}
END_SDK
Add(HubEx,9067877,567,63)
{
link(onEvent,8142414:doClose,[(600,69)(600,32)(600,32)(51,32)(51,62)])
}
Add(Hub,11366045,119,56)
{
link(onEvent1,1242222:doValue,[])
}
END_SDK
Add(TCP_Client2,2065185,294,119)
{
}
----------------------------------------------------------------------------
Клиент:
Make(delphi)
ver(4.04 build 182)
Add(MainForm,2953706,84,112)
{
Caption="Client"
}
Add(TCP_Client,14483641,343,140)
{
Port=8081
IP="127.0.0.1"
link(onRead,14567411:doText,[])
link(onDisconnect,8635246:doNext,[])
}
Add(Timer,5696206,182,140)
{
link(onTimer,10285692:doEvent1,[])
}
Add(Hub,10285692,231,140)
{
link(onEvent1,14483641:doOpen,[])
link(onEvent2,553782:doData,[(263,153)(263,160)])
}
Add(DoData,553782,280,154)
{
Data=String(GETasdfghjklzxcvbnm HTTP)
link(onEventData,14483641:doSend,[])
}
Add(Label,11036455,518,154)
{
Left=65
Top=25
Width=160
}
Add(Counter,8635246,455,154)
{
link(onNext,11036455:doText,[])
}
Add(Label,14567411,399,140)
{
Left=65
Top=50
Width=25
Height=17
Caption="data"
}



Поиск
Друзья
Администрация