Получить значение переменных, работающих в CFLOOP, используя CFTREAD JOIN
-
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>
.