ColdFusion线程:循环会话变量+睡眠

时间:2010-08-17 14:29:10

标签: multithreading session loops coldfusion timer

嘿伙计们我正在尝试创建一个计时器来计算在页面上使用线程所花费的时间到目前为止我所拥有的:

<cfset session.time=0>
<cfthread name="timer" action="run">
<cfscript>
  counter = 0;
  while (counter <9000) {
    sleep(1000);
    session.time++;
    counter ++;
} 
</cfscript>
</cfthread>

第2页:

<cfoutput>#session.time#</cfoutput>
每当有人看到问题时,第2页给我0?

编辑: 我将代码的第1行更改为<cfset session.time=100>,现在第2页显示为100,它就像cfscript循环中的内容不会重新分配session.time

3 个答案:

答案 0 :(得分:0)

您的代码适用于我。你有一个Application.cfm页面设置来启用会话管理,即:

<cfapplication name="#hash(getCurrentTemplatePath())#"  
    sessiontimeout="#createTimeSpan(0,0,20,0)#" sessionmanagement="true"/>

答案 1 :(得分:0)

这对我有用。

您确定使用的是ColdFusion的开发人员版或企业版,并且线程实际上已经启动了吗?我认为只有那些版本支持多线程。

验证线程运行的一种方法是使用cfstat - 即使页面已经返回,您也应该看到一个请求正在运行。

另一个是从您生成的线程写入输出 - 使用下面剪切的代码写入System.out - 理想情况下,您需要将CF作为控制台任务运行才能执行此操作。

<cfset session.time=0 />

<cfthread name="timer" action="run">
<cfscript>
  counter = 0;
  while (counter <9000) {
    sleep(1000);
    session.time++;

    sys = createObject("java", "java.lang.System");
    sys.out.println("*** [DEBUG]  - #timeformat(now(),'HH:mm:ss' )# - session.time=#session.time# ");

    counter ++;
} 
</cfscript>
</cfthread>

答案 2 :(得分:-1)

在线程内执行的代码有自己的范围,包括会话。我会在内部设置一个变量,然后从线程范围内访问它。

即。 将session.time++;更改为thread.time++;,然后使用cfthread[timer].time获取帖子的时间。

虽然如果你像其他一些帖子一样启用会话管理,这可能不会成立。

相关问题