Я правильно использую для этого решения?
-
30-09-2019 - |
Вопрос
Я пытаюсь сделать несколько загруженных изображений через <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
файл.
Не уверен, что это просто то, что я должен попытаться запустить после того, как все файлы загружены?
Мысли? Не уверен, как правильно сделать это работать.
РЕДАКТИРОВАТЬ
После некоторого звона, похоже, у меня была ошибка, не связанная с нитью, которую я зафиксировал, но я должен держать что-нибудь в виду, что «оставив» нити, как это? Должен ли я убить их в какой-то момент? Будут ли они просто очищаться после завершения? Как я могу положить «максимальное время исполнения» на нить?
Решение
Если вы запускаете нить и на самом деле не звоните <cfthread action="join" />
В какой-то момент позже нить будет работать, параллельно на вашей теме выполнения страницы, и при необходимости будет работать намного дольше, пока он не завершит его задачу.
Нет проблем, оставляющих темы, по которым это так - они будут очищены, как вы ожидаете, когда они будут завершены.
Если вы хотите посмотреть, запущена ли поток только запуска cfstat
который будет перечислять все бегущие запросы - даже те, которые выгнали cfthread
.
Вы, наверное, видел документы CF здесь но дальше к этому проверку расследования Бена Надаль здесь.
Что касается Timeouts Threads - вы можете указать максимальное время, чтобы дождаться, чтобы потоки, которые вы создали, чтобы присоединиться к выполнению страницы, но AFAIK Нет способа разместить тайм-аут (например, время ожидания запроса страницы) на резьбу, который вы создали.
Надеюсь, это поможет!
Другие советы
Одна нота:
Документы говорят о «нулевых или более атрибутах, специфичных приложениям». Я бы обратил внимание на это. Это создает локальную копию переменной, что позволяет вам передавать значения, которые не будут изменены.
Итак, я бы позвонил
<cfthread action="run" name="t#qMid.mid#" mid="#qMid.mid#">
<cfinvoke component="core.media-functions" method="generateThumbnails">
<cfinvokeargument name="mid" value="#mid#">
</cfinvoke>
</cfthread>
Иметь смысл?