Dois-je utiliser un thread ?

the diouk Messages postés 21 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 25 mai 2005 - 20 mai 2005 à 11:46
the diouk Messages postés 21 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 25 mai 2005 - 23 mai 2005 à 11:29
dans le prog que je fais, j'appelle une fonction de comptage qui peut durée plusieurs heures, elle est lancée quand j'appuye sur run dans le menu. mais dès lors, toute l'uc est pris pour compté et si par exemple je click sur réduction de la fenêtre ou n'importe quelle action, ça plante.

je me suis dit qu'un thread serait bien, mais dans les définissions j'ai vu que cette fonction prennait un paramètre, ça je m'en fout, je veux juste qu'il puisse exécuter la fonction qui elle demande 2 paramètre et renvoi 1. C'est possible de lancer une fonction dans un thread ? si oui comment je lui donne les paramètres à donner à la fonction de comptage ( car ces paramètres sont définis avant dans des édit ) ???

sinon au pire je pensait juste mettre un button annuler qui permettrait de revenir à la fenêtre initiale mais pareil, comment faire en sorte que le click soit pris en compte sans que tout bug ? encore un thread ?

si quelqu'un peut me donner quelques infos se serait cool
merci

Easy love Baby

3 réponses

MNEMONIC Messages postés 59 Date d'inscription dimanche 19 décembre 2004 Statut Membre Dernière intervention 1 septembre 2006
20 mai 2005 à 15:06
Dans la boucle la plus longue, essaye d'ajoutter une pause d'une millisec par boucle...
Grâce à cette pause, ta boucle libèrera le processeur juste assez longtemps pour laisser bosser les autres...
Sous Visual cpp, c'est Sleep(n), avec n en milli secondes.
0
mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010
20 mai 2005 à 17:02
ou avec un thread mais en priorité basse ce qui te laissera tu temps
pour les autres application tout en ayant un controle sur le thread.
Pour controler un thread --> une application fenetré toute
bête permettant par exemple de stopper ton programme. et Comme elle est
gérer par des messages elle utilise quasiment aucun temp processeur.

Voili,Voilou
0
the diouk Messages postés 21 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 25 mai 2005 1
23 mai 2005 à 11:29
j'ai utilisé Sleep, mais rien de neuf, il bug toujours, par contre c'est vrai que l'uc est partiellement libérée. J'hésite toujours à utiliser un thread : peut-t-on lui passer plusieurs variables pour qu'il puisse lui même les utiliser ?
Je m'explique : je veut qu'il fasse un threads avec ça :

while (nb < nNbAcquisitions)
{
t0 = time(NULL);
t1 = time(NULL);
while ( difftime (t0+nDuree*60,t1)>0)
{
k = DllFunc3(&b);
while(b!=2)
{
Sleep(100);
k = DllFunc3(&b);
}
j++;
Sleep(500);

if (j%2==0)SetCursor(LoadCursor(hThisInstance, IDC_HAND));
else SetCursor(LoadCursor(hThisInstance, IDC_WAIT));
t1 = time(NULL);
}

/* on en fait une moyenne */

Moyenne=j/nDuree;
if (!Moyenne)
{
MessageBox(hwnd,"aucun signal détecté\n"
"vérifier la mise en place du capteur\n"
"ou la connection USB","attention...",
MB_OK | MB_ICONWARNING);
return(0);
}

Sleep(nIntervalle*60000);
/* on affiche cette valeur dans un box */

*itoa(Moyenne, szMoyenne, 10 );
SetWindowText(hWndEditMoyenne,szMoyenne );
SetFocus( hWndEditMoyenne);

/* on incrémente l'indicateur de nombre d'opérations effectuées */
nb++;

/* on sauvergarde la donnée */

fprintf(fp,
"\nacquisition[%d] = %d bats/min",
nb,Moyenne);

}

mais peut-t-on (et comment ) lui passer les paramètres à utiliser: nDuree, nIntervalle et nbAcquisition qui eux sont déterminés plus tôt par l'utilisateur. Mais déjà là avec mes Sleep, ça devrai marcher non ?
merci si quelqu'un peut m'éclairer
Easy love Baby
0
Rejoignez-nous