首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么CFTHREAD不运行查询和创建文件?

为什么CFTHREAD不运行查询和创建文件?
EN

Stack Overflow用户
提问于 2014-12-10 19:08:22
回答 1查看 741关注 0票数 1

我有一个函数应该检查文件的日期。如果文件大于60秒,查询应该运行并创建一个新文件。该查询需要60秒才能运行。

当没有包装在CFTHREAD中时,这个过程将完美地工作。当使用CFTHREAD时,似乎什么都没有发生。我没有错误。我希望看到的是一个新的文件正在制作。我从没见过那个新文件。

我应该在哪里找一个错误?我遗漏了什么?为什么CFTHREAD不起作用?

代码语言:javascript
复制
<!--- GET CATEGORIES --->
<cffunction name="getCategories" access="remote">
    <cfscript>
        LOCAL.MaxFileAge = 60;
        LOCAL.MaxFileUnits = 's';

        // THE FILE
        LOCAL.TheFileDaily = "#VARIABLES.JSDir#\#VARIABLES.DayMonth#-categories.json";

        // THE FILE DOES NOT EXIST
        if (fileExists(LOCAL.TheFileDaily) == false) {
            LOCAL.MakeNewFile = true;
        // THE FILE EXISTS
        } else {
            // GET THE DATE OF THE FILE
            LOCAL.LastModified = getFileInfo(LOCAL.TheFileDaily).LastModified;
            // GET FILE AGE
            LOCAL.FileAge = dateDiff(LOCAL.MaxFileUnits, LOCAL.LastModified, now());
            // FILE IS OLD
            if (LOCAL.FileAge > LOCAL.MaxFileAge) {
                LOCAL.MakeNewFile = true;
            } else {
                LOCAL.MakeNewFile = false;
            }
        }
    </cfscript>
    <cfif LOCAL.MakeNewFile eq true>
        <cfthread action="run" priority="HIGH">
            <cfquery name="Q">
                SELECT  Stuff
                FROM    Tables
            </cfquery>
            <!--- MAKE THE DAILY FILE --->
            <cffile action="write" file="#LOCAL.TheFileDaily#" output="#serializeJSON(Q)#">
        </cfthread> 
    </cfif>
</cffunction>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-10 21:53:08

您不能将本地作用域写入或共享到单独的线程,您需要通过请求范围共享它们(请求是理想的范围,因为开发人员对包含在其中的数据有非常严格的控制)。你可以尝试这样的方法:

在请求范围内创建一个结构并写入该结构。

公平地说,只有需要传输的变量才需要在请求作用域的结构中。这只是一个普通的更新,因为我不知道CFTHREAD的内容到底是什么样子。在本例中,TheFileDaily实际上是您要共享的唯一变量,因此这将是请求范围中唯一需要的变量。

代码语言:javascript
复制
<!--- GET CATEGORIES --->
<cffunction name="getCategories" access="remote">
    <cfscript>
        request.lData = StructNew();
        request.lData.MaxFileAge = 60;
        request.lData.MaxFileUnits = 's';

        // THE FILE
        request.lData.TheFileDaily = "#VARIABLES.JSDir#\#VARIABLES.DayMonth#-categories.json";

        // THE FILE DOES NOT EXIST
        if (fileExists(request.lData.TheFileDaily) == false) {
            request.lData.MakeNewFile = true;
        // THE FILE EXISTS
        } else {
            // GET THE DATE OF THE FILE
            request.lData.LastModified = getFileInfo(request.lData.TheFileDaily).LastModified;
            // GET FILE AGE
            request.lData.FileAge = dateDiff(request.lData.MaxFileUnits, request.lData.LastModified, now());
            // FILE IS OLD
            if (request.lData.FileAge > request.lData.MaxFileAge) {
                request.lData.MakeNewFile = true;
            } else {
                request.lData.MakeNewFile = false;
            }
        }
    </cfscript>
    <cfif request.lData.MakeNewFile eq true>
        <cfthread action="run" priority="HIGH">
            <cfquery name="Q">
                SELECT  Stuff
                FROM    Tables
            </cfquery>
            <!--- MAKE THE DAILY FILE --->
            <cffile action="write" file="#request.lData.TheFileDaily#" output="#serializeJSON(Q)#">
        </cfthread> 
    </cfif>
</cffunction>

有用的来源:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27408936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档