在Lucee v5.2.9.31中,当我从cfthread对象请求test_thread线程的状态时,以下代码在checkTest线程内引发错误。我得到的错误是key [test_thread] doesn't exist
。
<cfthread action="run" name="test_thread">
<cfloop index='i' from='1' to='50'>
<cffile action="append" file="./test_thread.txt" addNewLine="yes" output="Index: #i#" />
<cfset sleep(500) />
</cfloop>
</cfthread>
<cfthread action="run" name="checkTest">
<cfset test_thread_complete = false />
<cfloop condition="test_thread_complete eq false">
<cfset test_thread_status = cfthread['test_thread'].status />
<cffile action="append" file="./checkTestThread.txt" addNewLine="yes" output="#test_thread_status#" />
<cfif test_thread_status eq 'COMPLETED'>
<cfset test_thread_complete = true />
</cfif>
<cfset sleep(1000) />
</cfloop>
</cfthread>
<cfdump var="#cfthread#" />
<cfdump var="#cfthread['test_thread']#" />
但是,在早期版本的Lucee(v4.5.5.015)中,代码按预期工作并生成了2个文件:带有递增索引的test_thread.txt和包含test_thread状态的checkTestThread.txt。
在两个版本中,cfdumps返回cfthread对象。第一个转储包含两个线程,第二个转储仅包含test_thread对象。
这是Lucee 5中的错误,还是代码利用了早期版本的Lucee / Railo中的错误?
答案 0 :(得分:0)
这是由于对Lucee进行的更新所致。
根据Michael Offner(Lucee的维护者):
原因是这不再适用于Lucee,因为我们增加了支持 线程内部具有线程的数量,因为从那时起,“ cfthread”仅显示 树中当前线程的子级(请参见键“ childThreads” 在“ cfthread”内部)。我们不能在一个级别上显示所有线程 造成混乱,因为我们将在同一位置显示线程树 时间。
问题已在v5.3.4.37中修复,但是由于其解决方案添加了一个threadData
函数,该函数返回根cfthread对象,因此该代码需要进行更新。
在我的代码中,将以下内容更改为:<cfset test_thread_status = cfthread['test_thread'].status />
到<cfset test_thread_status = threadData()['test_thread'].status />
修复了该错误并正确返回了同级线程的状态。