Я правильно использую <cfthread>для этого решения? - PullRequest
0 голосов
/ 10 ноября 2010

Я пытаюсь сделать несколько загрузок изображений с помощью тега <cffileupload>.Тег вызывает файл с именем fileupload.cfm для обработки / завершения изображения.

Внутри этого изображения я хочу начать с потока (здесь я могу не понимать потоков, поэтому дайте мне знать), чтобы яможет ответить «изображение загружено» обратно в приложение для флэш-загрузки, но инициировать процесс создания эскиза (который может длиться около 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 ]

2 голосов
/ 11 ноября 2010

Одна нота:

В документах говорится о "ноль или более специфичных для приложения атрибутов". Я бы обратил на это внимание. Это создает локальную копию переменной, позволяя передавать значения, которые не будут изменены.

Итак, я бы назвал

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

Имеет смысл?

2 голосов
/ 10 ноября 2010

Если вы запускаете поток и на самом деле не вызываете <cfthread action="join" />, то через некоторое время поток будет работать параллельно с потоком выполнения вашей страницы и при необходимости будет работать намного дольше, пока не выполнит свою задачу.

Нет проблем с тем, чтобы потоки работали так - они будут очищены так, как вы и ожидаете после их завершения.

Если вы хотите увидеть, запущен ли поток, просто запустите cfstat, в котором будут перечислены все запущенные запросы, даже те, которые были запущены cfthread.

Вы, вероятно, видели документы CF здесь , но в дополнение к этому посмотрите расследование Бена Надаля здесь .

Что касается времени ожидания потока - вы можете указать максимальное время ожидания потоков, которые вы создали, чтобы присоединиться к выполнению страницы, но AFAIK нет способа установить время ожидания (например, время ожидания запроса страницы) для потока, который вы создали.

Надеюсь, это поможет!

...