|
begin process at 2008 05 16 04:26:05
Derniers logiciels
|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : Limiter un thread [ Système / Mémoire ] (leroukin)
|
Limiter un thread
le 27/12/2007 10:29:00

leroukin
|
Salut à tous,
j'ai pu lire de nombreux posts concernant les threads mais je me pose tjrs une question :
est-il possible de limiter le thread à, par exemple, 50% d'utilisation des ressources de la machine. Dans mon cas , le thread peut faire un traitement tres important et peut donc faire lager ma machine et voir la faire planter ( en gros tant qu'il y a de le place roule ma poule je pépon du process...). j'ai bien trouvé MonThread.Priority mais cela ne limite pas l'utilisation de la mémoire hélas :(.
Si le sujet existe déjà j'en suis désolé ^^'. Mais à priori je n'ai rien trouvé là dessus.
J'attends vos réponses avec impatience 
|
|
|
|
Re : Limiter un thread
le 27/12/2007 13:36:25
|
|
Re : Limiter un thread
le 27/12/2007 14:26:04

leroukin
|
le but de mon code est de faire du pushmail. l'utilisateur balance sa liste de destinataires ( pouvant etre de 5 à 3000 personnes ) et mon prog genere un email personnalisé en fonction de chaque utilisateur ( son adresse, info abonnement etc etc )
en gros :
While (Not TableEMAILLG.EOF) do MonEmail.send(param1,param2)
et tout cela se passe dans un Thread afin de ne pas bloqué l'appli le tps de lenvoi. Mais le problème est : si MonEmail ( composant ANSMTP [ Lien ]) est en mode Synchrone, l'utilisation du CPU monte à 50% tres bien pas de problème, mais mon appli devient alors tres tres lente. Si MonEmail est en mode Asynchrone, il semblerait ( je nai pas le code source du composant ANSMTP ) qu'il cree plusieurs threads à l'interieur de mon Thread et là mon appli fonctionne bien , mais par contre le CPU s'emballe jusqu à plantage ...
donc pkoi mon appli est super ralentie en mode synchrone ? comment léviter ? et comment eviter que mon CPU se blinde en mode asynchrone (autrement que avec des sleeps, jy avais effectivement pensé )
mon problème est pas évident et pas forcement claire mais si quelqu'un a une piste ou une petite idée .. u welcome !
|
|
|
|
Re : Limiter un thread
le 27/12/2007 16:03:10

Caribensila
Membre Club 
|
Salut,
Si ton composant ANSMTP est en mode Asynchrone, il semble bien que l'appli conserve la trace d'un trop grand nombre de threads. En CPU monocore
, le maxi est de 16 threads actifs par processus...
Perso, je commencerais par surveiller l'état des Threads avec Voir | Fenêtres de débogage | Threads.
PS: Que se passe-t'il si
MonEmail est en mode Synchrone et MonThread.Priority := tpIdle?
|
|
|
|
Re : Limiter un thread
le 27/12/2007 16:08:14
|
|
Re : Limiter un thread
le 27/12/2007 17:03:40

leroukin
|
Merci Caribensila pour tes propositions.
Avec MonEmail en synchrone et MonThread.Priority en tpidle le resultat est le meme, l'application est tres tres ralentie.
Je regarde de suite TMultiReadExclusiveWriteSynchronizer, je ne connais pas du tout jvois ce que j'arrive à faire avec.
sinon une idée vient de me traverser l'esprit, peu être pourrais je agir directement sur MonEmail et "brider" l'objet plutot que d'agir au niveau du Thread ( c'est peu etre une grosse con**** ce que je dis là mais bon à voir :) )
|
|
|
|
Re : Limiter un thread
le 27/12/2007 18:50:55

WhiteHippo
Membre Club 
|
Quand on regarde le site du composant que tu as donné, il est précisé ici qu'il faut utiliser le "EASendMail Service". Pourquoi ? Parce qu'il est tout simplement fait pour ( "It enables your application to send mass emails in background service. And it also supports picking the recipients from database in background and sending email in specified datetime")Ce qui au final devrait solutionner ton problème. Cordialement. "L'imagination est plus importante que le savoir." Albert Einstein
|
|
|
|
Re : Limiter un thread
le 28/12/2007 09:29:19

leroukin
|
Hélas, WhiteHippo je ne peux utiliser EASendMail Service. Pourquoi ? Parceque :
"you should download EASendMail Service and install it on the server at first. If you are using a web hosting and you don't have permission to install service on the server, then EASendMail service is not suitable for you."
je ne veux pas passer par un serveur, mais uniquement par les DNS lookup, je ne peux donc pas utiliser EASendMail Service .
Je suis en train de regarder quelques astuces avec les TMultiReadExclusiveWriteSynchronizer.
Je vous tiens au courant rapidement afin de cloturer, j'espere, rapidement le sujet.
Cordialement.
|
|
|
|
Re : Limiter un thread
le 28/12/2007 11:25:45

WhiteHippo
Membre Club 
|
Réponse acceptée !
En mode asynchrone ( ici en bas de page ), une boucle d'attente de l'envoi du message est codée contenant un DoEvents (équivalent du Application.ProcessMessages). Il serait bon d'intégrer une portion de code équivalent en Delphi dans ta boucle d'envoi et rendre ainsi la main au programme durant l'envoi du message. N.B. As tu spécifié MaxThreads à une valeur raisonnable ? Cordialement. "L'imagination est plus importante que le savoir." Albert Einstein
|
|
|
|
Re : Limiter un thread
le 28/12/2007 16:56:02

leroukin
|
Après de mysthiques essais, ca fonctionne !!
j'utilise l'outil multithread FastSender fourni avec le composant ANSMTP. cela ne bloque pas mon appli et j'arrive bien à limiter l'utilisation du CPU.
merci à vous 2 pour vos réponses qui m'ont d'une part permis davancer + vite mais aussi d'en apprendre + sur les threads !
Je cloture le sujet !
|
|
|
Classé sous : utilisation, limiter, trouvé, machine, thread
|
CalendriCode
| | | L | M | M | J | V | S | D |
| | | | 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |
|
Téléchargements
Logiciels à télécharger sur le même thème :
|
|