Вверх ↑
Ответов: 39
Рейтинг: 0
#1: 2021-02-10 20:14:18 ЛС | профиль | цитата
Netspirit писал(а):
Там всё работает правильно. Просто запрещено грубо прерывать поток исполнения. Дай себе ответ зачем прерывать работу потока, а потом поищи другой способ решения (без прерывания).

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

MBO писал(а):
что бы без потока работал как старый http_get?
Вот, в HTTP_Get не делаешь остановки потока (там поток есть внутри)? Вот и здесь не делай и всё будет работать. Тупо сбрось связь с Thread.doStop и поставь Thread.BusyEvent=Ignore.

Редактировалось 3 раз(а), последний 2021-02-10 14:16:23


Понял.
В общем я сделал так:

Add(MultiElement,3230401,567,266)
{
 @Color=11163135
}
BEGIN_SDK
  Add(EditMulti,15339671,21,21)
  {
   EventCount=2
   WorkCount=1
   DataCount=5
   Width=930
   Height=781
   link(doWork1,7227391:doCompare,[(42,27)(42,538)])
  }
  Add(MultiElement,10603034,357,476)
  {
   link(Data1,15339671:Data2,[(363,248)(34,248)])
  }
  BEGIN_SDK
    Add(EditMulti,3772229,21,21)
    {
     WorkCount=1
     DataCount=1
     VarCount=3
     Width=783
     Height=494
     link(doWork1,13160684:doSplit,[(53,27)(53,146)])
     link(Var1,2851825:Value,[(27,361)(594,361)])
     link(Var2,3549405:Value,[(34,361)(671,361)])
     link(Var3,1994398:Value,[(41,361)(727,361)])
    }
    Add(MultiStrPart,13160684,84,140)
    {
     Char="@"
     Point(onNotFound)
     link(onSplit,2874390:doEvent1,[(149,146)])
     link(Str,4332754:Var2,[])
     link(onNotFound,892182:doEvent1,[(124,153)(124,265)])
    }
    Add(Memory,2851825,588,175)
    {
    }
    Add(Memory,3549405,665,175)
    {
    }
    Add(Memory,1994398,721,175)
    {
    }
    Add(Hub,892182,147,259)
    {
     OutCount=3
     link(onEvent1,7826930:doData,[])
     link(onEvent2,3549405:doClear,[(392,272)(392,188)])
     link(onEvent3,1994398:doClear,[(420,279)(420,188)])
    }
    Add(DoData,7826930,182,259)
    {
     link(onEventData,10978073:doEvent1,[(380,265)(380,181)])
     link(Data,4332754:Var3,[(188,103)])
    }
    Add(GetDataEx,4332754,84,98)
    {
     Angle=3
     link(Data,3772229:Data1,[(27,103)])
    }
    Add(Hub,2874390,147,119)
    {
     link(onEvent1,6803681:doData,[])
     link(onEvent2,3449222:doSplit,[(193,132)(193,167)])
    }
    Add(DoData,6803681,196,119)
    {
     link(onEventData,10978073:doEvent2,[(390,125)(390,188)])
     link(Data,13160684:Part1,[(202,107)(146,107)(146,184)(90,184)])
    }
    Add(Hub,10978073,553,175)
    {
     InCount=2
     link(onEvent1,2851825:doValue,[])
    }
    Add(MultiStrPart,3449222,224,161)
    {
     Char=":"
     Point(onNotFound)
     link(onSplit,5683787:doEvent1,[])
     link(Str,13160684:Part2,[(230,149)(164,149)(164,184)(97,184)])
    }
    Add(Hub,5683787,266,161)
    {
     link(onEvent1,5785945:doData,[(287,167)(287,146)])
     link(onEvent2,10110114:doData,[(290,174)(290,188)])
    }
    Add(DoData,5785945,294,140)
    {
     link(onEventData,3549405:doValue,[(496,146)(496,181)])
     link(Data,3449222:Part1,[(300,128)(265,128)(265,205)(230,205)])
    }
    Add(DoData,10110114,301,182)
    {
     link(onEventData,1994398:doValue,[(527,188)(527,181)])
     link(Data,3449222:Part2,[(307,170)(272,170)(272,205)(237,205)])
    }
  END_SDK
  Add(HTTPClient,15281445,469,630)
  {
   Method=1
   EncType=1
   SendTimeout=0
   RecvTimeout=0
   Point(Proxy)
   Point(ProxyUser)
   Point(ProxyPass)
   Point(onAuthProxy)
   Point(doUserAgent)
   Point(PostData)
   Point(onStateChange)
   link(URL,15339671:Data1,[(475,326)(27,326)])
   link(FileName,7399373:Var3,[(482,89)])
   link(onFinish,11854635:doEvent1,[])
   link(Proxy,10603034:Var1,[(489,569)(363,569)])
   link(ProxyUser,10603034:Var2,[(496,569)(370,569)])
   link(ProxyPass,10603034:Var3,[(503,569)(377,569)])
   link(PostData,12861955:Var2,[])
  }
  Add(Hub,3606552,294,511)
  {
   InCount=2
   OutCount=9
   link(onEvent1,2566564:doWork1,[(476,517)(476,482)])
   link(onEvent3,15281445:doAbort,[(371,531)(371,678)(458,678)(458,650)])
   link(onEvent4,10603034:doWork1,[(332,538)(332,482)])
   link(onEvent5,12973578:doCompare,[(354,545)(354,524)])
   link(onEvent8,8951318:doStart,[(320,566)(320,594)(275,594)(275,622)])
   link(onEvent9,9202351:doTimer,[(224,573)(224,657)])
  }
  Add(DoData,2126026,483,483)
  {
   link(onEventData,15281445:doUserAgent,[(523,489)(523,657)])
   link(Data,3545356:Value,[(489,457)(552,457)])
  }
  Add(If_else,12973578,399,518)
  {
   link(onTrue,2126026:doData,[(457,524)(457,489)])
   link(onFalse,13679769:doData,[(457,531)(457,538)])
   link(Op1,5964060:Var2,[])
   link(Op2,2001601:Value,[(412,496)(433,496)])
  }
  Add(GetDataEx,5964060,399,427)
  {
   link(Data,15339671:Data3,[(405,270)(41,270)])
  }
  Add(DoData,13679769,483,532)
  {
   link(Data,5964060:Var3,[(489,432)])
  }
  Add(Memory,2001601,427,441)
  {
   Default=String()
  }
  Add(Memory,3545356,546,399)
  {
   Default=String(Mozilla/5.0 (Windows NT 5.1; rv:52.0) Gecko/20100101 Firefox/52.0)
  }
  Add(Thread,8951318,287,616)
  {
   Delay=200
   FastStop=0
   Point(doStopFlag)
   link(onExec,6565431:doCompare,[])
  }
  Add(Hub,11854635,595,637)
  {
   OutCount=4
   link(onEvent1,15339671:onEvent1,[(729,643)(729,27)])
   link(onEvent2,9202351:doStop,[(621,650)(621,657)(226,657)(226,664)])
   link(onEvent3,16554511:doEvent2,[(621,657)(621,580)(590,580)(590,503)])
  }
  Add(Memory,14893065,686,476)
  {
   Default=String(1)
  }
  Add(ChanelToIndex,2566564,644,476)
  {
   link(onIndex,14893065:doValue,[])
  }
  Add(If_else,7227391,63,532)
  {
   link(onTrue,11698479:doCompare,[])
   link(Op1,15281892:Var1,[(69,520)])
   link(Op2,3219965:Var1,[(76,460)])
  }
  Add(Memory,9893737,112,357)
  {
   Default=String(1)
  }
  Add(Timer,9202351,231,651)
  {
   Interval=10000
   Enable=1
   AutoStop=1
   link(onTimer,16554511:doEvent1,[(478,657)(478,496)])
  }
  Add(Hub,16554511,602,490)
  {
   InCount=2
   link(onEvent1,2566564:doWork2,[(630,496)(630,489)])
  }
  Add(GetDataEx,12861955,504,609)
  {
   link(Data,15339671:Data4,[(510,326)(48,326)])
  }
  Add(If_else,11698479,112,532)
  {
   link(onFalse,3606552:doEvent1,[(219,545)(219,517)])
   link(Op1,16153412:Var1,[(118,513)(268,513)(268,660)])
   link(Op2,3219965:Var3,[(125,460)])
  }
  Add(GetDataEx,3219965,112,455)
  {
   link(Data,9893737:Value,[])
  }
  Add(If_else,6565431,357,616)
  {
   link(onTrue,15281445:doLoadString,[(429,622)(429,636)])
   link(onFalse,15281445:doLoadFile,[(429,629)(429,643)])
   link(Op1,7399373:Var2,[(363,318)(55,318)])
   link(Op2,14123805:Value,[(370,390)(398,390)])
  }
  Add(GetDataEx,7399373,49,84)
  {
   link(Data,15339671:Data5,[])
  }
  Add(Memory,14123805,392,133)
  {
  }
  Add(FormatStr,5964964,322,693)
  {
   DataCount=3
   Mask="Переменная %1 (дб 1) Поток %2 (дб 0) ХТТП Статус %3"
   link(onFString,15339671:onEvent2,[(652,699)(652,34)])
   link(Str1,15281892:Var2,[(328,609)(692,609)])
   link(Str2,16153412:Var3,[(335,660)])
   link(Str3,15281445:Status,[(342,684)(475,684)])
  }
  Add(Timer,7780620,266,700)
  {
   Interval=1
   link(onTimer,5964964:doString,[(310,706)(310,699)])
  }
  Add(GetDataEx,15281892,686,515)
  {
   link(Data,14893065:Value,[])
  }
  Add(GetDataEx,16153412,287,655)
  {
   link(Data,8951318:Busy,[])
  }
END_SDK


верно?

Или http запрос тоже лучше не прерывать?
карма: 0

0