注意:我已经完全重写了这个问题以考虑新信息。如果你已经读过这个,请重新阅读。
cfthread
在 ColdFusion 10 的自定义标签中使用 from 时出现错误。在应用程序日志中,我收到以下条目:
Variable _cffunccfthread_cfThreadTag2ecfm16902001291 is undefined.
它作为错误返回的函数的名称是_cffunccfthread_cf[Page Name Calling the CFThreadTag]
一个不会随着请求而改变的数字。我每次都可以使用以下代码复制它:
应用程序.cfc:
component
{
this.name = "CFThreadCustomTagTest";
}
ThePage.cfm:
<cfthread action="run" name="ThreadTestInPage">
<cflog log="Application" text="The thread in the page successfully ran" type="information" />
</cfthread>
<cf_ThreadTag />
ThreadTag.cfm:
<cfif thisTag.ExecutionMode EQ "start">
<cfthread action="run" name="ThreadTest">
<cflog log="Application" text="The thread within the tag successfully ran" type="information" />
</cfthread>
</cfif>
只需将所有三个文件放在 ColdFusion 10 的目录中并加载 ThePage.cfm。我在应用程序日志中得到以下条目:
"Severity","ThreadID","Date","Time","Application","Message"
"Information","ajp-bio-8012-exec-1","06/19/12","07:18:11",,"C:\ColdFusion10\cfusion\logs\application.log initialized"
"Information","cfthread-11","06/19/12","07:18:15","CFTHREADCUSTOMTAGTEST","The thread in the page successfully ran"
"Error","cfthread-9","06/19/12","07:18:15",,"THREADTEST: Variable _cffunccfthread_cfThreadTag2ecfm16902001291 is undefined. "
我还注意到,在自定义标签内的线程错误中,它不包含应用程序名称。虽然页面中线程的日志条目确实如此。请注意,错误行仅,,
针对日志的 Application 列,而成功线程具有"CFTHREADCUSTOMTAGTEST"
.
如果我更改ThreadTag.cfm
为等待标记中的线程完成处理,那么一切正常,并且我得到了日志中的两个条目,如我所料:
<cfif thisTag.ExecutionMode EQ "start">
<cfthread action="run" name="ThreadTest">
<cflog log="Application" text="The thread within the tag successfully ran" type="information" />
</cfthread>
<cfthread action="join" name="ThreadTest" timeout="10" />
<cfdump var="#cfthread#">
</cfif>
为了验证任何地方都没有时髦的设置,这是我的本地开发环境的设置摘要。
所以看起来如果我只是把线程扔出去,而不是等待它完成,那么线程似乎正在从父页面中寻找不再存在于内存中的东西。至少这是我完全没有根据的猜测:)。
我还向 Adobe 提交了一个错误。错误号 3218452。