Lucee 5.2中cfthread标记内的cfthread对象为空

时间:2019-02-04 15:15:22

标签: cfml lucee

在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中的错误?

1 个答案:

答案 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 />修复了该错误并正确返回了同级线程的状态。

更多信息: