我正在尝试通过以下方式上传多个图像 <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 文件。

不确定这是否只是我应该在上传所有文件后尝试运行的东西?

想法?不知道如何让它正常工作。

编辑

经过一番修补后,看起来我遇到了一个与我修复的线程无关的错误,但是我应该记住这样的“留下”线程吗?我应该在某个时候杀死他们吗?完工后会直接清理吗?如何在线程上设置“最大执行时间”?

有帮助吗?

解决方案

如果您运行一个线程但实际上没有调用 <cfthread action="join" /> 在稍后的某个时刻,该线程将与页面执行线程并行运行,并且如有必要,该线程将运行更长时间,直到完成其任务。

让线程像这样运行是没有问题的——一旦完成,它们就会像你期望的那样被清理。

如果你想查看线程是否正在运行,只需运行 cfstat 这将列出所有正在运行的请求 - 即使是由 cfthread.

您可能已经看过 CF 文档 这里 但除此之外,请查看本·纳达尔的调查 这里.

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

希望有帮助!

其他提示

一则注释:

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

所以,我会打电话

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

合理?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top