EXÉCUTION D'UN THREAD SANS SURCHARGER LE PROCESSEUR

Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 - 6 avril 2006 à 20:26
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 - 7 févr. 2007 à 17:58
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/36913-execution-d-un-thread-sans-surcharger-le-processeur

cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
7 févr. 2007 à 17:58
lol
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
7 févr. 2007 à 17:47
"Et là j'envoi 2 milliards de mails lol" c fout comme ca revolutionne la programmation...
oubli de mettre sur ton CV que t'a fait un mail bomber performant avec du multithreading.
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
4 févr. 2007 à 19:17
lol c'est vrai mais maintenant je risque plus rien car j'ai trouvé des sécurités et j'ai boosté la vitesse par 5. avec un code qui fixe le nombre de thread maxi et chaque thread fait la même tâche.

Et là j'envoi 2 milliards de mails lol
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
14 avril 2006 à 14:50
lol
c'est normal faut pas encourager ce genre de chose qui sont néfastent pour les programmeurs et surtout les administrateurs réseau et système (et comme j'ai les 3 métiers en même temps je n'encourage surtout pas ce genre de chose)
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
14 avril 2006 à 13:54
Ben c'est pas une bêtise c'est que certains utilisateurs se plaignet que des sources comme les Trojan, MailBomber, Sniffer etc... soit mise sur ce site !

D'ailleurs j'ai envoyé 10000 mails à un pote j'ai intérêt à vite lui enlevé sinon j'ai à faire à la police ! lol

Redman
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
13 avril 2006 à 07:45
lol
t'as encore fait des betises avec tes sources...
va falloir faire des choses plus constructives si tu ne veux pas être interdit à chaque fois...
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
12 avril 2006 à 18:11
Voici ma source : http://www.vbfrance.com/code.aspx?ID=37020

Elle sera bientôt améliorée !
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
12 avril 2006 à 16:43
Je suis pas tout le temps sur internet, je vais mettre une source qui montre l'utilisation de threads mais avant tout ca sera une source MailBomber, je pense qu'elle sera postée dans la journée.

Bonne continuation !

Redman
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
12 avril 2006 à 16:27
comment tu fais pour faire ton invoke s'il n'y a pas de formulaire dans l'appli ??
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
12 avril 2006 à 10:28
"m'y mettrait aux vacances." => a la rentrée...
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
12 avril 2006 à 10:28
bon pour le tuto ca attendra la rentrée car la je suis pas en vacance moi encore et le pire chuis en semaine de bac blanc... et pis durant les vacs j'aurai pas de pc.
donc voila je m'y mettrait aux vacances.
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
12 avril 2006 à 07:41
lol
pas faux
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
11 avril 2006 à 18:07
j'ai pas compris ou tu voulais en venir mais c'est pas grave, je pense que comme les source directX (bien hard) le multithreading c'est comme on le sent.
"comme tout joueur de jeux videos" => oui car tout les programmeur motivé sont des joueur (et souvent des bons lol)
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
11 avril 2006 à 08:54
je comprends que ta méthode est plus économe en ressource que la mienne seulement elle pose problème dans ma façon de programmer car :
je lance une instance de class1 qui lance une instance de class2 qui exécute le thread
or si je le fait avec ta façon lorsque le thread sera lancé l'exécution reviendra sur la class1
mais ce que je veux c'est l'exécution reste sur la class2 jusqu'à la fin du thread...
donc ma méthode me convient mieux...
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
11 avril 2006 à 07:36
ok
merci

(je suis pas du genre à abandonner lol)
(comme tout joueur de jeux videos lol)
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
10 avril 2006 à 21:04
ecoute le code fonctionne, il fait le boulot demandé, c'est jsute que c'est pas "officiel" et que c'est pas tres economisateur pour le processeur, c'est tout de meme tres bien de voir que tu t'interresse et que tu ne capitule pas (apres le paté que je t'ai mis lol)
donc oui le code est bon, mais c'est pas celui que je recommande et de loin pas.

un code ayant le moins de boucle possible ne marchant que quasiement avec des evenements est un bon code.
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
10 avril 2006 à 11:47
c'est une autre méthode...

j'aime bien travailler par procedure pour avoir une continuité...

je vai tout de même essayer

sinon l'idée de mon source n'était pas trop mauvaise ?
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
10 avril 2006 à 11:27
pourquoi le thread principal doit verifier que le thread secondaire est terminé alors que avec mon code le thread secondaire dit lui meme au thread principal qu'il as fini, tout marche par evenement et non plus par boucle ce qui est economise BEAUCOUP de la puissance processeur.
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
10 avril 2006 à 07:46
Bonjour,

Désolé de ne pas avoir répondu plus tôt mais je ne bosse pas souvent le week-end...

si je fais comme ça c'est pour détecter la fin du thread qui est dans une API

Donc, il me faut bien vérifié s'il est terminé ou pas...
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
9 avril 2006 à 17:38
Il a toujours un seul thread qui travaille car j'ai mis une sécurité donc toujours un thread et hyper efficace ! Sans ramer.

Voici la procédure avec la sécurité :

Try
If tLoop Is Nothing Then
tLoop = New Threading.Thread(AddressOf Action)
End If

If tLoop.ThreadState = Threading.ThreadState.Stopped Then
tLoop = New Threading.Thread(AddressOf Action)
End If

Catch ex As Exception
MsgBox(ex.ToString, MsgBoxStyle.Exclamation)
End Try

If tLoop.ThreadState = Threading.ThreadState.Running Then
Exit Sub
End If

Try
tLoop.Start()
tLoop.Join() ' Empêche que les threads se dépasse dans le temps
Catch ex As Exception
MsgBox(ex.ToString, MsgBoxStyle.Exclamation)
End Try

Redman

P:S, Pour la composition du tuto, je veux bien participer. Tu peux m'envoyer un MP.
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
9 avril 2006 à 13:34
ha oui tu parlait de relancer un thread ^^
donc toi du dit de relancer le thread toute les 1 millisecondes pour effectuer le screenshot... ouais c possible mais fo faire gaffe car un pc mets + de 1ms a prendre un screen et le pc sera super ralenti au bout d'un moment a force d'avoir tout plein de thread qui travaille.
sinon pour la procedure => envoie c'est toujours bon a prendre. et pour le tuto ben je vais reflechir a sa composition ^^
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
9 avril 2006 à 12:28
Ben j'utilise par ThreadStart pour le démarrer, je fais "Thread.Start()" tout bête, j'en fait pas plusieurs pour une même requête, je créer la une fonction qui relance le thread lorsque qu'il a finit, et avec cette fonction j'ai fait un prog qui prend 1 screenshot par milliseconde et enregistre l'image dans un dossier, ca marche impec !

En effet ca serait une bonne idée que tu fasses, un tuto.

Veux tu que je montre la procédure pour relancer indéfiniment le thread ?

Redman
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
9 avril 2006 à 11:54
"ThreadStart" => ben il lance le thread et l'execute pardi ^^
"Moi j'utilise tout le temps un Thread et rien d'autre et c'est suffisant pour ne pas faire "RAMER" l'ordinateur !" => pareil, il faut en faire plusieur si tu fais plusieur requete en meme temps mais c'est rare comme utilisation...

je devrai faire un tuto sur le multithreading, avec la dose de gens que je corrige la dessus ^^
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
9 avril 2006 à 10:54
Je suis du même avis de LucyBerad...

LucyBerad -> Do Loop sert à attendre que le thread ai fini sinon le programme se ferme juste après le démarrage du thread(lorsque on commence par SubMain, inutile lorsque l'objet de démarrage est ue fenêtre)

Eldim -> A quoi sert ThreadStart ??!!

Moi j'utilise tout le temps un Thread et rien d'autre et c'est suffisant pour ne pas faire "RAMER" l'ordinateur !

Redman
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
7 avril 2006 à 19:27
"ensuite y'as encore un truc qui me titille, en gros apparament ton code regarde sur le thread secondaire a pas planté" => j'ai dit ca mais je me suis gouré, ton code attend juste la fin du thread secondaire (comme mon analyse le constate apres ^^)

sinon voila le multithreading n'est pas une tache simple, il est juste que tu as mal pris le prblm et j'essaie de te guider, voila donc ils ne faut pas prendre mal le fait que je te corrige, mais plutot le prendre comme une source d'interessement. (ce qui prouve le long texte precedemment posté)

bonne chance !
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
7 avril 2006 à 19:21
ouais ca j'avais compris que traduit ca donnait en arriere plan, mais ca agit comment sur le thread en lui meme, ca lui fait quoi?
car voila ma pensée: un thread est un sorte d'"executable" a lui meme qui effectue un bout de code, il y as le thread principal qui fait l'affichage et les ligne de code que on lui donne. On crée un deuxieme thread, ce second thread ne va rien faire en rapport avec le premier et va executeer sa ligne de code, ce second thread (si il est prevu dans ce cas) va effectuer sa tache et rendre un objet au thread principal ou simplement lui faire executer une fonction.
donc voila mon mailaise a propos de isbackground car un thread travaille forcement en arriere plan.

ensuite y'as encore un truc qui me titille, en gros apparament ton code regarde sur le thread secondaire a pas planté, bien mais voila tu rajoute dans ta description "sans surcharger le processeur" or le fait de faire un do loop (une boucle sans fin) est a mon avis beaucoup plus bouffeur de ressource que le second thread qui va etre en "BelowNormal" donc ce que tu cherche a reduire d'un coté tu le compense ensuite de l'autre...

bon donc j'essaie de decoder ton code:
- il permet de lancer un thread mais sans qu'il predomine (d'où le belownormal)
- ensuite tu attend la fin d'un thread avec join. sans arguments join attend la fin du thread, or l'integer (ici 1) determine le temps que le join va attendre la fin du thread secondaire, la tu l'attend 1ms. et ensuite si le join fonctionne pas ben voila le thread principal continue son code
- pour eviter ca tu as mis un do loop pour verifier en permanence la fin du thread sur un laps de 1ms et pour eviter que le do loop bloque le programme durant son executaion, tu as mis Application.DoEvents()

voila, en fait ton thread principal scan si le thread secondaire a fini, mais voila il est largement plus simple que le thread secondaire dise qu'il as fini tout seul comme un grand !
c'est pourquoi ce code est extremement plus propre:
Private Sub Lancer_Thread()
Dim Thread1 As New Threading.Thread(AddressOf Sale_Boulot)
Thread1.Start()
End Sub

Private Sub Sale_Boulot()
'ici on mets le code que le thread secondaire doit effectuer
Dim UneVariable as String = "Je suis une variable"
Me.Invoke(New Evenement(AddressOf Fin_Thread), UneVariable)
End Sub

Private Delegate Sub Evenement(ByVal UneVariable As String)

Private Sub Fin_Thread(ByVal UneVariable As String)
'cette fonction la grace a la fonction delegate est lancée sur le thread principal (celui de l'application) et recoi le string UneVariable en cadeau.
MsgBox(UneVariable)
End Sub
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
7 avril 2006 à 07:45
Salut Lucyberad !

Le fait de mettre un doevents permet à ton application de se rafraichir donc pas de blocage
Le join permet de libérer les ressources
Le isbackground ben traduit le en français...(arrière plan)
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
6 avril 2006 à 20:26
ca manque de commentaires ce code...
explique les lignes: Th.IsBackground = True et Application.DoEvents()
car la je voit pas ce que ca peut faire au thread...
Rejoignez-nous