Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / LPVOID / 8 сообщений из 8, страница 1 из 1
16.04.2006, 21:12
    #33669767
sever221mar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LPVOID
Ребята, помогите, разъясните.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
DWORD WINAPI Func(LPVOID sock)
{
	SOCKET s = (SOCKET)sock;
	
	char* buff = new char[ 10 ];
	
	// Получаем данные от клиента
	recv(s,buff, 10 , 0 );
	cout<<buff<<endl;
	cout<<"============================"<<endl;
	
	// отправим клиенту ответ	

	char* str = "OK";
	
	send(s,str,(int)(strlen(str)+ 1 ), 0 );
	
	// Закрываем существующий сокет
	closesocket(s);

	return  0 ;
}

int _tmain(int argc, _TCHAR* argv[])
{
	
	// Код инициализации сокета и режим прослушки	
	
	sockaddr_in n_addr;
	int d_size = sizeof(n_addr);

	// Создаем новый сокет
	SOCKET n_sock;
			
	do
	{
		// извлекаем из очереди запрос (разрешена попытка связи)
		n_sock = accept(sock,(sockaddr*)&n_addr,&d_size);
				
		if (n_sock == INVALID_SOCKET)
		{
			break;
		}
				
				
		// Функция обмена в новый поток
		HANDLE t = CreateThread(NULL, 0 ,(LPTHREAD_START_ROUTINE)Func,(LPVOID)n_sock, 0 , 0 );
		
		
	}
	while (true);

		
	getch();
	
	// Завершаем использование WS2_32.DLL
	WSACleanup();
	return  0 ;
}

Объясните, как (LPVOID)n_sock передается в функцию потока и что именно передается. Когда пытаюсь передать (LPVOID)&n_sock - ошибка в одновременной обработке нескольких потоков, т.к. обращение к одной и той же области памяти. А так все нормально, но непонимаю, что передается!!!
...
Рейтинг: 0 / 0
16.04.2006, 21:19
    #33669774
Сергей Ильич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LPVOID
Нахрен это уродство - LPVOID? Венгерскую нотацию - ф топку. Используй void*, так понятней.
...
Рейтинг: 0 / 0
16.04.2006, 21:24
    #33669777
Сергей Ильич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LPVOID
А вообще - SOCKET это видимо четырехбайтовое значение, ты его конвертируешь в void* который тоже четырехбайтовый и передешь в поток. В потоке конвертируешь void* обратно в SOCKET. Получается своеобразная передача по значению, а не по ссылке.
...
Рейтинг: 0 / 0
16.04.2006, 21:51
    #33669801
sever221mar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LPVOID
Сергей ИльичА вообще - SOCKET это видимо четырехбайтовое значение, ты его конвертируешь в void* который тоже четырехбайтовый и передешь в поток. В потоке конвертируешь void* обратно в SOCKET. Получается своеобразная передача по значению, а не по ссылке.

Спасибо, как теперь таким же способом передать в поток структуру!!!
...
Рейтинг: 0 / 0
16.04.2006, 22:53
    #33669851
Сергей Ильич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LPVOID
sever221mar Сергей ИльичА вообще - SOCKET это видимо четырехбайтовое значение, ты его конвертируешь в void* который тоже четырехбайтовый и передешь в поток. В потоке конвертируешь void* обратно в SOCKET. Получается своеобразная передача по значению, а не по ссылке.

Спасибо, как теперь таким же способом передать в поток структуру!!!
Создать структуру в куче, передать через параметр потока (void*) и в потоке ее удалить из кучи, когда будет не нужна.
...
Рейтинг: 0 / 0
17.04.2006, 01:33
    #33669955
=Ozzy=
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LPVOID
И вокруг этого столько разговоров? :)
Непонимаю чем вам венгерская нотация не нравиться?
...
Рейтинг: 0 / 0
17.04.2006, 01:46
    #33669962
Сергей Ильич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LPVOID
Потому шта у венграф была Трансильвания, они топтали нашу родину вместе с Гитлеровскими оккупантами и вообще они му**ки.
...
Рейтинг: 0 / 0
17.04.2006, 18:01
    #33671921
sever221mar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LPVOID
Сергей Ильич sever221mar Сергей ИльичА вообще - SOCKET это видимо четырехбайтовое значение, ты его конвертируешь в void* который тоже четырехбайтовый и передешь в поток. В потоке конвертируешь void* обратно в SOCKET. Получается своеобразная передача по значению, а не по ссылке.

Спасибо, как теперь таким же способом передать в поток структуру!!!
Создать структуру в куче, передать через параметр потока (void*) и в потоке ее удалить из кучи, когда будет не нужна.

Спасибо большое за помощь, а венгра Windows оставте все-таки в покое. Спасибо!!!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / LPVOID / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]