Получить значение переменных, работающих в CFLOOP, используя CFTREAD JOIN

StackOverflow https://stackoverflow.com/questions/3248513

  •  15-09-2020
  •  | 
  •  

Вопрос

Спасибо за ответ !!Но я все еще не могу это сделать.Ошибка, которую я получаю, это «Element Objget1 не определен в объекте Java Class Coldfusion.runtime.variablescope».

ниже мой полный код.Я просто хочу сбросить значение каждой нити, содержащей информацию CFHTTP.

. http://www.google.com/search? "&" q= vin + diesel "&" & num= 10 "&" & start=") />

<cfset intStartTime = GetTickCount() />

<cfloop index="intGet" from="1" to="10" step="1">

    <!--- Start a new thread for this CFHttp call. --->
    <cfthread action="run" name="objGet#intGet#">

        <cfhttp method="GET" url="#strBaseURL##((intGet - 1) * 10)#" useragent="#CGI.http_user_agent#" result="THREAD.Get#intGet#" />

    </cfthread>

</cfloop>

<cfloop index="intGet" from="1" to="10" step="1">

    <cfthread action="join" name="objGet#intGet#" />
    <cfdump var="#Variables['objGet'&intGet]#"><br />

</cfloop>
.

и когда я использую после соединения потока внутри цикла.Я получаю желаемые результаты Спасибо !!

Это было полезно?

Решение

Вот два проблемы, происходящие здесь.

Как указано Zugwalt, вам нужно явно пройти переменные, которые вы хотите ссылаться в объем вашей темы.Он пропустил переменную CGI, этот объем не существует в вашей теме.Таким образом, мы проходим только то, что нам нужно использовать в потоке, useragent, strbaseurl и intget.

Вторая проблема, однажды присоединившаяся, ваши потоки не находятся в переменной области, они находятся в CFThread Scope, поэтому мы должны прочитать их оттуда.

Исправленный код:

<cfloop index="intGet" from="1" to="2" step="1">

    <!--- Start a new thread for this CFHttp call. Pass in user Agent, strBaseURL, and intGet --->
    <cfthread action="run" name="objGet#intGet#" userAgent="#cgi.http_user_agent#" intGet="#intGet#" strBaseURL="#strBaseURL#">

        <!--- Store the http request into the thread scope, so it will be visible after joining--->
        <cfhttp method="GET" url="#strBaseURL & ((intGet - 1) * 10)#" userAgent="#userAgent#" result="thread.get#intGet#"  />

    </cfthread>

</cfloop>

<cfloop index="intGet" from="1" to="2" step="1">

    <!--- Join each thread ---> 
    <cfthread action="join" name="objGet#intGet#" />
    <!--- Dump each named thread from the cfthread scope --->
    <cfdump var="#cfthread['objGet#intGet#']#" />

</cfloop>
.

Другие советы

Как правило, unspoped переменные попадают в область охвата Variables, поэтому вы можете использовать нотацию структуры кронштейна для их ссылки:

Variables['objGet#intGet#']
.

или

Variables['objGet'&intGet]
.

Они оба в основном делают то же самое - просто разные синтаксисы.

Код запускается внутри тега CFTHREAD имеет свой собственный объем.Попробуйте пройти переменную, которую вы хотите получить доступ в качестве атрибута.Мне нравится называть это что-то другое, чтобы помочь мне отслеживать.

<!--- Start a new thread for this CFHttp call. --->
<cfthread action="run" name="objGet#intGet#" intGetForThread="#intGet#">

    <cfhttp method="GET" url="#strBaseURL##((intGetForThread- 1) * 10)#" useragent="#CGI.http_user_agent#" result="THREAD.Get#intGetForThread#" />

</cfthread>
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top