Obtener el valor de las variables que se ejecuta en cfloop utilizando cfthread unirse

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

  •  15-09-2020
  •  | 
  •  

Pregunta

Gracias por responder!!Pero todavía no estoy capaz de hacerlo.Error que estoy consiguiendo es "El elemento objGet1 no está definido en un objeto Java de la clase de tipo de coldfusion.en tiempo de ejecución.VariableScope."

A continuación es mi código completo.Sólo quiero volcar el valor de cada hilo que contiene cfhttp información.

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>

y cuando yo lo uso después de la rosca de unirse en el interior del bucle.Puedo obtener los resultados deseados Gracias!!

¿Fue útil?

Solución

Dos problemas sucediendo aquí.

Según lo señaló Zugwalt, debe pasar explícitamente las variables que desea hacer referencia dentro del alcance de su hilo.Se perdió la variable CGI, ese alcance no existe dentro de su hilo.Así que pasamos por lo que necesitamos usar en el hilo, UserAment, Strbaseurl e Intget.

Segundo problema, una vez unido, sus hilos no están en el alcance variable, están en el alcance de CFTHEAD, por lo que tenemos que leerlos desde allí.

Código corregido:

<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>

Otros consejos

En general, sin ámbito de las variables llegar a poner en el Variables alcance, así que usted puede utilizar la estructura de soporte de la notación para referirse a ellos:

Variables['objGet#intGet#']

o

Variables['objGet'&intGet]

Estos son, básicamente, hacer lo mismo, simplemente es diferente de la sintaxis.

El código ejecutado dentro de una etiqueta CFTHEAD tiene su propio alcance.Intente pasar la variable de la que desea acceder como un atributo.Me gusta nombrarlo algo diferente para ayudarme a mantenerse en la pista.

<!--- 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>

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top