[C++] Comment créer un thread ?

Comment créer un thread ? [C++] - Programmation

Marsh Posté le 20-01-2001 à 22:34:49    

Tout est dans le sujet.
J'ai VC++6 Pro
J'ai essayé la fonction API CreateThread
Mon problème c que cette fonction veut un pointeur vers une fonction que le thread doit executer et que je sait pas comment lui dire quelle fonction il doit executer.

Reply

Marsh Posté le 20-01-2001 à 22:34:49   

Reply

Marsh Posté le 20-01-2001 à 22:50:57    

Ben si tu sais pas quelle fonction exécuter, pourquoi crées-tu un thread :confused:

Reply

Marsh Posté le 20-01-2001 à 22:52:45    

je sais quelle fonction executer mais je sais pas comment dire au thread qu'il doit executer cette fonction.

Reply

Marsh Posté le 20-01-2001 à 22:58:49    

Tu mets le nom de la fonction dans l'appel à CreateThread.

 

--Message édité par Verdoux--

Reply

Marsh Posté le 20-01-2001 à 23:09:41    

voilà le pb :
le code :
void Test()
{
 __asm
 {
ssxor eax,eax
boucle:
ssinc eax
ssjno boucle
 }
}
 
void CTestCPUDlg::OnLancerTest()ss
{
 CreateThread(NULL, 100, Test, NULL, NULL, NULL);ss
}
 
et l'erreur :
error C2664: 'CreateThread' : cannot convert parameter 3 from 'void (void)' to 'unsigned long (__stdcall *)(void *)'
ssssssssNone of the functions with this name in scope match the target type

Reply

Marsh Posté le 20-01-2001 à 23:17:49    

Tu changes le prototype de Test en:
DWORD Test(LPVOID parameter)
 
Et l'appel en:
CreateThread(NULL, 100, (LPTHREAD_START_ROUTINE) Test, NULL, NULL, NULL);

Reply

Marsh Posté le 20-01-2001 à 23:24:28    

OK merci, ca marche.
Mais maintenant, j'aimerais savoir comment faire pour mettre dans le thread un code qui affiche qqchose dans un textbox de la fenêtre.
 
 UpdateData(TRUE);
 m_val=100;
 UpdataData(FALSE);
 UpdateWindow();
 
donne :
error C2065: 'UpdateData' : undeclared identifier
error C2065: 'm_val' : undeclared identifier
error C2065: 'UpdataData' : undeclared identifier
error C2660: 'UpdateWindow' : function does not take 0 parameters

Reply

Marsh Posté le 21-01-2001 à 00:29:54    

moi je fais ça:
void myThread(void *pvoid)
{
 while(1)
 {
ssSleep(20);
ssInvalidateRect(hWnd,NULL,FALSE);
 }
}
.....
.....
switch (message)
{
 case WM_CREATE:
ss_beginthread(myThread,0,NULL);
 return 0 ;
...
 
 
Moi c'est pour un prog opengl donc le thread est executé tout le temp.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed