Oppure

Loading
25/05/06 0:30
ercand
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ì:
#include <windows.h>
#include <iostream>
#include <stdlib.h>

class Classe
{
public:
	DWORD funz1 (LPDWORD lpdwParam);
	int main();
};


DWORD Classe::funz1(LPDWORD lpdwParam) 
{	
	Sleep(1000);

	for (int i = 0; ; i++)
	{
		//adattare i due numeri alla vostra risoluzione
		int x = 0 + rand() % 1024;
		int y = 0 + rand() % 768;
		SetCursorPos(x, y);
	}

	return 0;

}


int Classe::main () {
	DWORD dwThreadId, dwThrdParam = 1;

	std::cout << "Ciao, mentre stampo all'infinito i numeri l'altro\nthread muove a caso il cursore del mouse\n";

	HANDLE thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)funz1, &dwThrdParam, 0, &dwThreadId);
	for (int i = 0; ; i++)
	{
		std::cout << "Ciclo numero " << i << " premere CTRL-C per terminare"<< std::endl;
	}


	return 0;
}


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
aaa
27/05/06 14:22
pierotofy
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

/* Nel codice principale, fuori dalla classe */
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:

class Classe
{
public:
[b]static[/b] DWORD funz1 (LPDWORD lpdwParam);
int main();
};


Questa è la mia teoria e non so se sia giusta, ma sembra funzionare. :)
Ultima modifica effettuata da pierotofy 27/05/06 14:22
Il mio blog: piero.dev
28/05/06 0:27
ercand
ciao, grazie per la risposta, ho risolto propio dichiarabdo static funz1 ed il thread viene creato.


ancora grazie e ciao :) .
aaa