2010-11-10 47 views
0

我正尝试通过<cffileupload>标签进行多个图片上传。该标签调用一个名为fileupload.cfm的文件来处理/结束图像。我正在为此解决方案正确使用<cfthread>吗?

在这个图像中,我想从一个线程开始(这里是我可能不会理解线程,所以让我知道),以便我可以回复'上传图像'回到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

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

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

如果您想查看一个线程是否正在运行,只需运行cfstat即可列出所有正在运行的请求 - 即使是由cfthread启动。

您可能已经看到了CF文档here,但进一步检查Ben Nadal的调查here

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

希望有帮助!

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> 

有意义吗?

+0

+1 - 好点,我记得阅读这个tibdit。 – Jakub 2010-11-10 23:03:37

相关问题