代码之家  ›  专栏  ›  技术社区  ›  Jakub

对于此解决方案,我是否正确使用了<cfthread>?

  •  0
  • Jakub  · 技术社区  · 14 年前

    我正在尝试通过 <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) 作为要处理的项目的参考。我想我们一到终点线就断了 文件上传.cfm 文件。

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

    思想?不知道如何使这个正常工作。

    编辑

    在做了一些修改之后,看起来我犯了一个与我修复的线程无关的错误,但是我应该记住这样的“离开”线程吗?我应该在某个时候杀了他们吗?它们完成后会被清理吗?如何在线程上设置“最大执行时间”?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Ciaran Archer    14 年前

    如果运行线程而不实际调用 <cfthread action="join" /> 稍后,线程将与页面执行线程并行运行,必要时将运行更长时间,直到完成任务。

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

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

    你可能看过医生 here 但更进一步,看看本·纳达尔的调查 here .

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

    希望有帮助!

        2
  •  2
  •   Ben Doom    14 年前

    一个注意事项:

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

    所以,我会打电话给

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

    有道理?