Un Thread qui ne va pas :-(

dbiare Messages postés 45 Date d'inscription mercredi 30 novembre 2005 Statut Membre Dernière intervention 6 janvier 2006 - 19 déc. 2005 à 07:45
dbiare Messages postés 45 Date d'inscription mercredi 30 novembre 2005 Statut Membre Dernière intervention 6 janvier 2006 - 19 déc. 2005 à 14:33
Bonjour tout le monde
J'aimerais faire un « thread » sous Visual C++6. D'après ce que j'ai pu comprendre (après lecture) je déclare (dans un objet dérivé de CDialog) la fonction (qui sera mon unité d'exécution) suivante :

UINT CThreadDlg::ThreadFunc(LPVOID pParam)
{
??
return x;
}

Je (toujours d'après ce que j'ai compris) la déclare au système comme suivant :

void CThreadDlg::TestThread()
{
AfxBeginThread(ThreadFunc,(LPVOID)&variable);
}

Mais rien à faire, j'obtient toujours la même erreur !!!

error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'

Or il est bien indiqué (toujours dans ce que j'ai pu lire) qu'il faut déclarer la fonction « ThreadFunc » comme étant « unsigned int (void *) »

Arrgggg!!!!

Quelqu'un aurait-il une idée ?
Merci

6 réponses

vangeurmasker Messages postés 99 Date d'inscription mercredi 12 mai 2004 Statut Membre Dernière intervention 29 mars 2006
19 déc. 2005 à 08:44
J'ai eu des prolemes du genres. Essaie de sortir ta fonction ThreadFunc de ta classe. Je ne sait pas pourquoi mais chez moi c'était ça le problème. Si ta besoin des variables de ta classe tu passe un pointeur a ton thread.
0
dbiare Messages postés 45 Date d'inscription mercredi 30 novembre 2005 Statut Membre Dernière intervention 6 janvier 2006
19 déc. 2005 à 11:14
Ok maintenant ça marche Grand Merci !
Mais j'ai un autre petit prob?

Dans mon objet dérivé de CDialog, je déclare :
void CThreadDlg::TestThread()
{
AfxBeginThread(ThreadFunc,(LPVOID)&var);
}

J'ai aussi déclaré une variable (int) var (variable que je passe à l'aide d'un pointeur de type void), laquelle je veux incrémenter lors de mon thread

Comme fonction globale je déclare mon unité d'exécution :
UINT ThreadFunc(LPVOID pParam)
{
int *pi=(int*)pParam;
(*pi)++;
return 0;
}

Mon prob c'est que, je ne rentre que une seule fois dans mon thread et je dois rappeler la fonction void CThreadDlg::TestThread() {?} pour re-rentrer dans mon thread ??

Une idée peut être ?
Merci
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 déc. 2005 à 11:33
C'est un problème qu'on a déja eu plein de fois. Si tu veux laisser la méthode dans ta classe, il faut la mettre en static
C'est normal que ton thread est lancé qu'une seule fois. Pourquoi, et comboi de fois veux tu réentrer dans le thread?
0
dbiare Messages postés 45 Date d'inscription mercredi 30 novembre 2005 Statut Membre Dernière intervention 6 janvier 2006
19 déc. 2005 à 13:10
Si j'ai à peu prés compris le concept, une file d'attente est crée (géré par un algorithme) et un quantum de temps est alloué pour chaque unité d'exécution.

Ici, dans mon application je crée une Dialog Box, première unité d'exécution, et j'aimerais en crée une autre (d'unité d'exécution) car j'ai besoin de contrôler un automate et il me faut la possibilité (à tout moment) d'accéder à des boutons de ma Dialog Box pour stopper le process, le paramétrer, etc.
Le Thread que je veux générer me servirait à piloter l'automate. J'aimerais donc y entrer (et sortir) en permanence?
Tu comprends ce que je veux ? (je m?exprime pas toujours très bien ;-\)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 déc. 2005 à 13:28
Effectivement j'ai pas compris...Si tu veux 2 threads, tu peux très bien les créer à la suite
0
dbiare Messages postés 45 Date d'inscription mercredi 30 novembre 2005 Statut Membre Dernière intervention 6 janvier 2006
19 déc. 2005 à 14:33
J'ai manqué de discernement ! J'aurais pu être plus perspicace mais ça y est j'ai tout (enfin je crois) compris !!! Mieux vaut tard que jamais :-)!
En tout cas merci pour le coup de la déclaration ?static? car la dessus je commencer à désespérer.
Merci encore
0
Rejoignez-nous