Получите значение переменных, работающих в cfloop, использующем cfthread соединение

Спасибо за ответ!! Но я все еще не могу сделать это. Ошибка, которую я получаю, является "Элементом objGet1, не определено в объекте Java класса типа 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>

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

5
задан James A Mohler 21 December 2013 в 18:28
поделиться

2 ответа

Здесь возникают две проблемы.

Как указал Zugwalt, вам нужно явно передать переменные, на которые вы хотите ссылаться в пределах области видимости вашего потока. Он пропустил переменную CGI, которая не существует в пределах вашего потока. Поэтому мы передаем только то, что нам нужно использовать в потоке: userAgent, strBaseURL и intGet.

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

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

<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>
6
ответ дан 14 December 2019 в 01:00
поделиться

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

Variables['objGet#intGet#']

или

Variables['objGet'&intGet]

Они оба в основном делает то же самое - только с другим синтаксисом.

3
ответ дан 14 December 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: