检查冷熔线

Check on coldfusion threads

我正在尝试执行以下操作,它没有引发错误,但我也不知道它是否在做任何事情。有没有办法检查 Coldfusion 中的线程状态?

<cfset start = CreateDate(2005, 1, 1) />
<cfset stop = DateAdd("m", 1, now() ) />

<cfloop condition="start LTE stop">

    <cfthread name="#dateformat(start, 'mmddyyyy')#" action="run"> 

            <cfinvoke component="CFCs.DoSomething" method="DoSomething" 
                returnvariable="success" 
                dateStartDate="#dateformat(start, 'mm/dd/yyyy')#"
                dateEndDate="#dateformat(DateAdd('m', 1, start), 'mm/dd/yyyy')#"
                 />


    </cfthread> 

   <cfoutput> #LSDateFormat(start)# <br/> </cfoutput>


   <cfset start = DateAdd("m", 1, start)>

</cfloop>

首先,您的线程中的 start 变量可能会更改,因为它没有被传入。您在线程范围内需要的任何东西都应该在属性中传递。这使得变量线程安全。否则,如果变量在线程外发生变化,它也会在线程内发生变化,并可能产生意想不到的结果。在线程内部,如果要在线程外部访问变量,可以将变量存储在 THREAD 范围内。您还可以将您的代码放在 try/catch 中,并将异常存储在 THREAD 范围内,这样您就可以在线程外读取它以确定它是否出错以及为什么出错。

保留线程名称列表,然后在循环后使用 <cfthread action="join">。这告诉 CF 等待所有线程完成。然后您可以通过 CFTHREAD 范围访问线程。 CFTHREAD 结构将使用线程名称的键存储您的线程,因此您可以循环遍历它。

<cfset start = CreateDate(2005, 1, 1) />
<cfset stop = DateAdd("m", 1, now() ) />
<cfset threadNames = ''>

<cfloop condition="start LTE stop">
    <cfset newThreadName = dateformat(start, 'mmddyyyy') >
    <!--- add thread name to list of threads --->
    <cfset threadNames = listAppend(threadNames, newThreadName ) >

    <cfthread name="#newThreadName#" action="run" start="#start#">
        <cftry>
            <!--- store a variable in THREAD scope to be used outside thread --->
            <cfset THREAD.start = ATTRIBUTES.start>
            <cfset THREAD.foo = "bar">

            <!--- Do stuff here --->

            <cfcatch type="any">
                <!--- catch any error and store in the thread result --->
                <cfset THREAD.exception = CFCATCH>
            </cfcatch>
        </cftry>



    </cfthread>

   <cfoutput> #LSDateFormat(start)# <br/> </cfoutput>


   <cfset start = DateAdd("m", 1, start)>

</cfloop>

<!--- this waits for all threads to complete --->    
<cfthread action="join" name="#threadNames#" />

<!--- loop over thread results --->
<cfloop collection="#CFTHREAD#" item="t">
    <!--- do whatever you want with the thread result struct --->
    <cfoutput>#CFTHREAD[t].STATUS# <br /></cfoutput>
</cfloop>

<!--- Dump all the threads --->
<cfdump var="#CFTHREAD#" abort="true" />