我正在尝试通过<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
文件的末尾,该线程就会死掉。
不确定这是否是我上传所有文件后应尝试运行的内容?
思考?不知道如何正常工作。
修改
经过一些修补,看起来我有一个与我修复的线程无关的错误,但是我应该记住这样的'离开'线程吗?我应该在某个时候杀死他们吗?完成后他们会被清理干净吗?如何在线程上设置“最长执行时间”?
答案 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>
有意义吗?