Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - MultiThread problema cone le classi
Forum - C/C++ - MultiThread problema cone le classi

Avatar
ercand (Normal User)
Newbie


Messaggi: 3
Iscritto: 25/05/2006

Segnala al moderatore
Postato alle 2:30
Giovedì, 25/05/2006
ciao  tutti è il mio primo post, per prima cosa complimenti per il sito pieno di guide :love: , ed è propio su una vostra guida che ho dei problemi, quella sui threader.
Vi spiego, sto crivendo forza 4 con le directx9 e adesso devo realizzare l'intelligenza artificiale, per fare questo devo usare i multithreader per evitare che il calcolo delle AI blocchi l'applicazione, allora cercavi di riadattare il vostro esempio inserendo le classi e l'ho scritto così:
Codice sorgente - presumibilmente C++

  1. #include <windows.h>
  2. #include <iostream>
  3. #include <stdlib.h>
  4.  
  5. class Classe
  6. {
  7. public:
  8.         DWORD funz1 (LPDWORD lpdwParam);
  9.         int main();
  10. };
  11.  
  12.  
  13. DWORD Classe::funz1(LPDWORD lpdwParam)
  14. {      
  15.         Sleep(1000);
  16.  
  17.         for (int i = 0; ; i++)
  18.         {
  19.                 //adattare i due numeri alla vostra risoluzione
  20.                 int x = 0 + rand() % 1024;
  21.                 int y = 0 + rand() % 768;
  22.                 SetCursorPos(x, y);
  23.         }
  24.  
  25.         return 0;
  26.  
  27. }
  28.  
  29.  
  30. int Classe::main () {
  31.         DWORD dwThreadId, dwThrdParam = 1;
  32.  
  33.         std::cout << "Ciao, mentre stampo all'infinito i numeri l'altro\\nthread muove a caso il cursore del mouse\\n";
  34.  
  35.         HANDLE thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)funz1, &dwThrdParam, 0, &dwThreadId);
  36.         for (int i = 0; ; i++)
  37.         {
  38.                 std::cout << "Ciclo numero " << i << " premere CTRL-C per terminare"<< std::endl;
  39.         }
  40.  
  41.  
  42.         return 0;
  43. }



uso il c++ e VS2005 quando vado a compilare mi da il seguente errore: c:\documents and settings\andrea1\documenti\file ricevuti\multithread\multithread\multithread.cpp(40) : error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'LPTHREAD_START_ROUTINE'
        None of the functions with this name in scope match the target type

qualcuno sa aiutarmi :-|


grazie e ciaooo

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6110
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:22
Sabato, 27/05/2006
Il problema è causato dal fatto che cerchi di inviare alla funzione CreateThread un puntatore a una funzione membro. Il problema è che fino a che non istanzi la classe dall'esterno di essa

Codice sorgente - presumibilmente C/C++

  1. /* Nel codice principale, fuori dalla classe */
  2. Classe istanza = new Classe();



l'indirizzo di funz1 non è definito, il che genera l'errore di compilazione.

Puoi risolvere il problema aggiungendo la parola chiave static nella dichiarazione della funzione:

Codice sorgente - presumibilmente C/C++

  1. class Classe
  2. {
  3. public:
  4. [b]static[/b] DWORD funz1 (LPDWORD lpdwParam);
  5. int main();
  6. };



Questa è la mia teoria e non so se sia giusta, ma  sembra funzionare. :)

Ultima modifica effettuata da pierotofy il 27/05/2006 alle 16:22


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
ercand (Normal User)
Newbie


Messaggi: 3
Iscritto: 25/05/2006

Segnala al moderatore
Postato alle 2:27
Domenica, 28/05/2006
ciao, grazie per la risposta, ho risolto propio dichiarabdo static funz1 ed il thread viene creato.


ancora grazie e ciao :) .

PM Quote