2010-11-10 45 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

相關問題