0

我正在尝试通过<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方法,并使用 amedia id (mid)作为要处理的项目的参考。我认为一旦我们到达fileupload.cfm文件末尾,线程就会死掉。

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

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

编辑

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

4

2 回答 2

2

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

让线程像这样运行没有问题 - 一旦它们完成,它们将按照您的预期被清理。

如果您想查看线程是否正在运行,只需运行cfstat它,它将列出所有正在运行的请求 - 甚至是由cfthread.

您可能已经在这里看到了 CF 文档,但更进一步,请查看 Ben Nadal在此处的调查。

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

希望有帮助!

于 2010-11-10T20:48:59.557 回答
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>

有道理?

于 2010-11-10T21:48:15.640 回答