感谢您的回复!!但我仍然无法做到这一点。我得到的错误是 “元素objGet1未在类型为coldfusion.runtime.VariableScope的Java对象中定义。”
以下是我的完整代码。我只想转储包含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>
当我在循环中加入线程后使用。我得到了理想的结果 谢谢!
答案 0 :(得分:6)
这里发生了两个问题。
正如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>
答案 1 :(得分:3)
通常,未绑定的变量会被放入Variables
范围,因此您可以使用struct括号表示法来引用它们:
Variables['objGet#intGet#']
或
Variables['objGet'&intGet]
这些基本上都是做同样的事情 - 只是不同的语法。
答案 2 :(得分:0)
在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>