我是否正确使用<cfthread>来获得此解决方案?</cfthread>

时间:2010-11-10 19:33:59

标签: coldfusion coldfusion-9

我正在尝试通过<cffileupload>标记进行多个图片上传。标签调用名为fileupload.cfm的文件来处理/完成图像。

在该图像中我想开始一个线程(这里我可能不理解线程,所以让我知道),以便我可以回复'图像上传'回到Flash上​​传应用程序,但启动缩略图生成过程(可能持续1分钟左右,具体取决于文件大小)。

到目前为止,我添加了类似的内容:

<!--- BUILD A THREAD TO CREATE / GENERATE THUMBNAILS --->
<cfthread action="run" name="t#qMid.mid#">
    <cfinvoke component="core.media-functions" method="generateThumbnails">
        <cfinvokeargument name="mid" value="#qMid.mid#">
    </cfinvoke> 
</cfthread>

我正在调用generateThumbnails方法,并使用media id (mid)作为要处理的项目的参考。我想,一旦我们到达fileupload.cfm文件的末尾,该线程就会死掉。

不确定这是否是我上传所有文件后应尝试运行的内容?

思考?不知道如何正常工作。

修改

经过一些修补,看起来我有一个与我修复的线程无关的错误,但是我应该记住这样的'离开'线程吗?我应该在某个时候杀死他们吗?完成后他们会被清理干净吗?如何在线程上设置“最长执行时间”?

2 个答案:

答案 0 :(得分:2)

如果你运行一个线程并且之后没有实际调用<cfthread action="join" />线程将与你的页面执行线程并行运行,并且如果必要的话将运行更长时间直到它完成任务。

让线程像这样运行是没有问题的 - 它们会在完成后按照您的预期进行清​​理。

如果你想看一个线程是否正在运行,只需运行cfstat,它将列出所有正在运行的请求 - 甚至是cfthread启动的请求。

你可能已经看过CF文档here但是要进一步查看Ben Nadal的调查here

对于线程超时 - 您可以指定等待您创建的线程重新加入页面执行的最长时间,但是AFAIK无法在您创建的线程上设置超时(如页面请求超时)。

希望有所帮助!

答案 1 :(得分:2)

一个注意事项:

文档讨论“零个或多个特定于应用程序的属性”。我会注意这个。这将创建变量的本地副本,允许您传入不会更改的值。

所以,我会打电话给

<cfthread action="run" name="t#qMid.mid#" mid="#qMid.mid#">
    <cfinvoke component="core.media-functions" method="generateThumbnails">
        <cfinvokeargument name="mid" value="#mid#">
    </cfinvoke> 
</cfthread>

有意义吗?