Wątki włączane z struktury

0

Witam forumowiczów,

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

W tej linijce:

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?
0
  1. Funkcja musi być statyczna,
  2. operator rzutowania na int
0

Jest statyczna, dokladnie to tak wyglada jej prototyp

static DWORD Reading(PVOID pv)
0

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

0

Niestety dalej występuje błąd:

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

0

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

DWORD WINAPI ThreadProc(LPVOID lpParameter);
0
0x666 napisał(a)

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

DWORD WINAPI ThreadProc(LPVOID lpParameter);

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1