Pergunta

Obrigado por responder!!Mas ainda não estou capaz de fazê-lo.Erro que eu estou ficando é "Elemento objGet1 é indefinido em um objeto Java do tipo classe coldfusion.o tempo de execução.VariableScope."

Abaixo está o meu código completo.Eu só quero despejar o valor de cada thread que contém cfhttp informações.

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>

e quando eu uso depois de thread de ingressar dentro do loop.Eu e obter os resultados desejados Obrigado!!

Foi útil?

Solução

Dois problemas acontecendo aqui.

Como apontado por Zugwalt, você precisa passar explicitamente em variáveis que você deseja referência no âmbito do seu segmento.Ele perdeu a variável CGI, que o escopo não existe dentro do seu segmento.Então, podemos passar apenas o que precisamos para uso no segmento, userAgent, strBaseURL, e intGet.

Segundo problema, uma vez associado, o seu threads não estão no escopo de variável, eles estão no cfthread escopo, temos de lê-los de lá.

Código corrigido:

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

Outras dicas

Geralmente, sem escopo de variáveis obter colocar no Variables escopo, portanto, você pode usar a estrutura de suporte de notação para se referir a eles:

Variables['objGet#intGet#']

ou

Variables['objGet'&intGet]

Estes são os dois fazendo basicamente a mesma coisa - apenas sintaxes diferentes.

Código executado dentro de um cfthread marca tem o seu espaço próprio.Tentar passar a variável que você deseja para o acesso como um atributo.Eu gosto de citar é algo diferente só para me ajudar a manter o controle.

<!--- 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top