Wątki włączane z struktury

Wątki włączane z struktury
R3
  • Rejestracja:ponad 16 lat
  • Ostatnio:około 13 lat
  • Postów:50
0

Witam forumowiczów,

Chciałbym uruchomić wątek ze struktury, ale natrafiłem na problem nie do przeskoczenia...

W tej linijce:

Kopiuj
thReading = CreateThread(0, 0, &SClient::Reading, 0, CREATE_SUSPENDED, 0); 

Wyskakuje błąd:

error C2664: 'CreateThread' : cannot convert parameter 3 from 'DWORD (__cdecl *)(void)' to 'LPTHREAD_START_ROUTINE'

Pytania mam takie:

  1. Jak uruchomić taki wątek z wnętrza klasy/struktury?
  2. Czy da się napisać własne rzutowanie, mam na myśli np. własnej klasy CKlasa na typ int?
S3
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 11 lat
  • Postów:61
0
  1. Funkcja musi być statyczna,
  2. operator rzutowania na int
R3
  • Rejestracja:ponad 16 lat
  • Ostatnio:około 13 lat
  • Postów:50
0

Jest statyczna, dokladnie to tak wyglada jej prototyp

Kopiuj
static DWORD Reading(PVOID pv)
S3
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 11 lat
  • Postów:61
0

Dołącz do definicji funkcji WINAPI (po DWORD). & jest zbędny w przesłaniu funkcji do CreateThread

R3
  • Rejestracja:ponad 16 lat
  • Ostatnio:około 13 lat
  • Postów:50
0

Niestety dalej występuje błąd:

Kopiuj
struct SClient
{
	static DWORD WINAPI Reading()
	{
		return (0);
	}
	HANDLE thReading;
	bool bRead;
	
	std::string Name;
	int nip[4];
	
	TCPsocket Socket;
	IPaddress* Ip;
	
	char* msg;
	
	void flush();
	void read();
	void stopread();
};

void SClient::read()
{
	thReading = CreateThread(0, 0, SClient::Reading, 0, CREATE_SUSPENDED, 0);
}

Tak to u mnie wygląda. Jest to prototyp struktury i funkcja rozpoczynająca wątek. Skompilowanie takiego kodu wywala błąd:

error C2664: 'CreateThread' : cannot convert parameter 3 from 'DWORD (__stdcall *)(void)' to 'LPTHREAD_START_ROUTINE'
1> None of the functions with this name in scope match the target type

06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
0

Ech, dokumentację czytać! Funkcja wątka powinna mieć postać:

Kopiuj
DWORD WINAPI ThreadProc(LPVOID lpParameter);
R3
  • Rejestracja:ponad 16 lat
  • Ostatnio:około 13 lat
  • Postów:50
0
0x666 napisał(a)

Ech, dokumentację czytać! Funkcja wątka powinna mieć postać:

Kopiuj
DWORD WINAPI ThreadProc(LPVOID lpParameter);

Jesteś bogiem! Działa, dzięki wielkie! :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.