2010-07-14 7 views
5

उत्तर देने के लिए धन्यवाद !! लेकिन मैं अभी भी ऐसा करने में सक्षम नहीं हूं। त्रुटि जो मुझे मिल रही है "एलिमेंट objGet1 टाइप क्लास coldfusion.runtime.VariableScope के जावा ऑब्जेक्ट में अपरिभाषित है।"cfthread का उपयोग कर cfloop में चल रहे चर का मान प्राप्त करें

नीचे मेरा पूरा कोड है। मैं बस प्रत्येक थ्रेड के मूल्य को cfhttp जानकारी युक्त डंप करना चाहता हूं।

http://www.google.com/search? "&" q = विन + डीजल "&" & num = 10 "&" & शुरू = ") />

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

और जब मैं धागा पाश अंदर शामिल होने के बाद का उपयोग करें। मैं वांछित परिणाम धन्यवाद !!

उत्तर

4

दो समस्याओं यहाँ हो रहा।

जैसा कि ज़ुगवाल्ट द्वारा इंगित किया गया है, आपको स्पष्ट रूप से उन चरों में पारित करने की आवश्यकता है जिन्हें आप अपने धागे के दायरे में संदर्भित करना चाहते हैं। उन्होंने सीजीआई चर को याद किया, कि आपके धागे के भीतर गुंजाइश मौजूद नहीं है। इसलिए हम थ्रेड, userAgent, strBaseURL, और intGet में उपयोग करने की आवश्यकता के अनुसार बस जाते हैं।

दूसरी समस्या, एक बार जुड़ने के बाद, आपके धागे परिवर्तनीय दायरे में नहीं हैं, वे सीएफथ्रेड क्षेत्र में हैं, इसलिए हमें उन्हें वहां से पढ़ना है।

सही कोड:

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

अच्छा एंथनी पकड़ता है! मैंने पूरी समस्या पर काफी बारीकी से नहीं देखा लेकिन सौभाग्य से आप वास्तव में इसे दबा दिया! – Zugwalt

3

आम तौर पर, unscoped चर मिल Variables दायरे में डाल दिया हो, ताकि आप उन्हें का उल्लेख करने के struct ब्रैकेट संकेतन का उपयोग कर सकते हैं:

Variables['objGet#intGet#'] 

या

Variables['objGet'&intGet] 

इन दोनों मूल रूप से ही बात कर रहे हैं - बस अलग वाक्यविन्यास।

+0

अभी भी त्रुटि मिल रही है !! –

+0

हमम, क्या आप पुष्टि कर सकते हैं कि यदि आप डालते हैं तो यह पहले को डंप करता है? इसके अलावा, 'cfthread' में 'name' को' variables.objGet # intGet #" '- 'आवश्यक नहीं होना चाहिए, लेकिन मुझे अभी तक cfthread का उपयोग करने की आवश्यकता नहीं है, इसलिए पूरी तरह से यह सुनिश्चित नहीं है कि यह कैसे व्यवहार करता है । –

0

एक सीएफथ्रेड टैग के अंदर चलाए गए कोड का अपना दायरा है। उस चर को पारित करने का प्रयास करें जिसे आप एक विशेषता के रूप में एक्सेस करना चाहते हैं। मुझे ट्रैक रखने में मदद करने के लिए बस इसे कुछ अलग करना पसंद है।

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

संबंधित मुद्दे

 संबंधित मुद्दे