2010-11-10 26 views
0

J'essaie de faire plusieurs téléchargements d'images via la balise <cffileupload>. La balise appelle un fichier appelé fileupload.cfm pour traiter/finaliser l'image.Est-ce que j'utilise correctement <cfthread> pour cette solution?

À l'intérieur de cette image je veux commencer un fil (ici je ne comprendrais pas le filetage, alors faites le moi savoir) pour que je puisse répondre 'image téléchargée' à l'application de téléchargement flash, mais initier une génération de vignettes processus (qui peut durer environ 1 minute, selon la taille du fichier).

Jusqu'à présent, j'ajouté quelque chose comme:

<!--- 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> 

J'appelle la méthode generateThumbnails, et en utilisant un media id (mid) comme référence sur l'élément à traiter. Je pense que le fil meurt dès que nous atteignons la fin du fichier fileupload.cfm.

Vous ne savez pas si c'est quelque chose que je devrais essayer de lancer après le téléchargement de tous les fichiers?

Pensées? Je ne sais pas comment faire fonctionner correctement.

EDIT

Après quelques bricolages, on dirait que j'ai eu une erreur sans rapport avec le fil que je fixe, mais dois-je garder quoi que ce soit à l'esprit avec des fils « » laissant comme celui-ci? Devrais-je les tuer à un moment donné? Vont-ils juste être nettoyés après l'achèvement? Comment puis-je mettre un 'temps d'exécution maximum' sur un thread?

Répondre

2

Si vous exécutez un thread et n'appelez pas réellement <cfthread action="join" /> à un moment ultérieur, le thread s'exécutera, parallèlement au thread d'exécution de votre page, et si nécessaire, il s'exécutera beaucoup plus longtemps jusqu'à ce qu'il termine sa tâche.

Il n'y a aucun problème à laisser les threads fonctionner comme ceci - ils seront nettoyés comme vous vous y attendez une fois qu'ils sont terminés.

Si vous voulez voir si un thread est en cours d'exécution il suffit d'exécuter cfstat qui liste toutes les demandes en cours d'exécution - même celles lancées par cfthread.

Vous avez probablement vu les documents des FC here, mais plus loin, consultez l'enquête de Ben Nadal here. En ce qui concerne les délais d'attente des threads, vous pouvez spécifier un délai maximum d'attente pour les threads que vous avez créés pour l'exécution de la page, MAIS IL EST INTERDIT de placer un timeout sur le thread que vous avez créé.

Espérons que ça aide!

2

Une note:

Les documents parlent de "attributs zéro ou plus spécifiques à l'application". Je ferais attention à cela. Cela crée une copie locale de la variable, vous permettant de transmettre des valeurs qui ne seront pas modifiées.

Alors, je qualifierais

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

sens?

+0

+1 - Ah bon point, je me souviens avoir lu ce tibdit. – Jakub