XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Общение> Трактир
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Mihahail
๏̯͡๏
offline
Опыт: 17,766
Активность:
Создание потока(С++)
На днях решил на сипипи кодить =)
Собственно Никак не могу разобраться в сущности данной ошыбки:
error C3867: ServerForm::Form1::connetction: в вызове функции отсутствует список аргументов;
используйте "&ServerForm::Form1::connetction" для создания указателя на член
» Код тут
-----------------------------------------------------------------------------------
DWORD thID,  a = 666;
HANDLE hThread;
hThread=CreateThread(NULL, NULL, connetction, &a, NULL, &thID);
-----------------------------------------------------------------------------------
public: DWORD WINAPI connetction(LPVOID port)
{
	int nclients=0;
	//Инициализация
	char buff[1024];
	if (WSAStartup(0x0202,(WSADATA *) &buff[0])) 
    {
      // Ошибка!
	     this->LogBox->Text+=WSAGetLastError();
		  return -1;
	}
	////////////////////////////////////////////////////////////////////////
	SOCKET mysocket;
    // AF_INET     - сокет Интернета
    // SOCK_STREAM  - потоковый сокет (с
    //      установкой соединения)
    // 0      - по умолчанию выбирается TCP протокол
    if ((mysocket=socket(AF_INET,SOCK_STREAM,0))<0)
    {
      // Ошибка!
      this->LogBox->Text+=WSAGetLastError();
      WSACleanup();
        // Деиницилизация библиотеки Winsock
      return -1;
    };
	///////////////////////////////////////////////////////////////////////////
	// Шаг 3 связывание сокета с локальным адресом
    sockaddr_in local_addr;
    local_addr.sin_family=AF_INET;
    local_addr.sin_port=htons((int)port);
             // не забываем о сетевом порядке!!!
    local_addr.sin_addr.s_addr=0;
             // сервер принимает подключения
             // на все IP-адреса

    // вызываем bind для связывания
    if (bind(mysocket,(sockaddr *) &local_addr,
                sizeof(local_addr)))
    {
      // Ошибка
      this->LogBox->Text+=WSAGetLastError();
      closesocket(mysocket);  // закрываем сокет!
      WSACleanup();
      return -1;
    };
	////////////////////////////////////////////////////////////////////////////

	// Шаг 4 ожидание подключений
    // размер очереди – 0x100
    if(listen(mysocket, 0x100))
    {
      // Ошибка
      this->LogBox->Text+=WSAGetLastError();
      closesocket(mysocket);
      WSACleanup();
      return -1;
    }
	//////////////////////////////////////////////////////////////////////////////
	  // Шаг 5 - извлекаем сообщение из очереди
    SOCKET client_socket; // сокет для клиента
    sockaddr_in client_addr; // адрес клиента (заполняется системой)

    // функции accept необходимо передать размер структуры
    int client_addr_size = sizeof(client_addr);

    // цикл извлечения запросов на подключение из очереди
    while ((client_socket = accept(mysocket, (sockaddr *)&client_addr, \
           &client_addr_size)))
    {
        nclients++; // увеличиваем счетчик подключившихся клиентов

        // пытаемся получить имя хоста
        HOSTENT *hst;
        hst = gethostbyaddr((char *)&client_addr. sin_addr.s_addr, 4, AF_INET);
    };
    return 0;

};
-----------------------------------------------------------------------------------
Старый 03.10.2010, 23:09
jeD_wc3
Изучаю C++
offline
Опыт: 4,038
Активность:
Цитата:
Сообщение от Mihahail
while ((client_socket = accept(mysocket,

я жоский нуб, но тут не два равно на сравнении должно быть ваще?
Старый 03.10.2010, 23:16
Mihahail
๏̯͡๏
offline
Опыт: 17,766
Активность:
jeD_wc3, Нет, тут конкретно одно.
Так што, никто не знает?
Старый 03.10.2010, 23:42
SRes
1110101000
offline
Опыт: 9,997
Активность:
Нескромный вопрос : код писал сам ?

SRes добавил:
Видимо, нет, ибо с чего вдруг человек ставит на новый поток функцию, которая требует аргумент ?
Старый 03.10.2010, 23:50
Mihahail
๏̯͡๏
offline
Опыт: 17,766
Активность:
SRes, писал сам
А что такого в том, чтоб ставить в поток функцию, требующую аргумент? особенно если аргумент указать
Старый 03.10.2010, 23:56
ScorpioT1000
Работаем
offline
Опыт: отключен
выслал автору в лс мою ооп-реализацию сокетов =O
Старый 04.10.2010, 01:08
GhfDllT

offline
Опыт: 3,980
Активность:
В общем случае член-функцию класса в Createthread не передашь - _thiscall и lpthread_start_routine вроде не приводятся в принципе. Решается статическими методами http://forum.codenet.ru/showthread.php?t=52227
Старый 07.10.2010, 13:43
Mihahail
๏̯͡๏
offline
Опыт: 17,766
Активность:
GhfDllT, спасибо, теперь вопрос решён.
Tоadcop, Спасибо, никогда не загонял такие вещи в классы, не было нужды...
Старый 08.10.2010, 23:52
ScorpioT1000
Работаем
offline
Опыт: отключен
естественно, зато можно зис передавать через указатель но это говнокод )
Старый 09.10.2010, 04:06
GhfDllT

offline
Опыт: 3,980
Активность:
Цитата:
зато можно зис передавать через указатель но это говнокод )
- ну чай не C#. Да и чего ожидать - ядро писано на С и понятия не имеет что такое параметры через регистр получать. Говнокод? - категорично как-то. Для ООП без сомнения. По C# гайдлайнам за ref и out параметры убьют(то есть обрезается часть языка), а в структурном программировании тру-стайл когда функция возвращает 0 или код ошибки и при этом принимает указатель на какую-нибудь структуру в которую пишет результат. Если уж смешивается С++ и WinApi, то компромисы между подходами неизбежны.

GhfDllT добавил:
Но это на правах имхо
Старый 10.10.2010, 03:12
ScorpioT1000
Работаем
offline
Опыт: отключен
винапи говно, причем тут винапи? нашел чего обсуждать)
ScorpioT1000 добавил:
крутой код на плюсах выглядит даже круче, чем на шарпах (т.к. на шарпах много конкретных подключений, неймспейсов, всяческих триксов, а тут всё прямо, точно, определённо) и ясно что должен круто читаться, см Qt или wxWidgets из опенлисайнс например
Старый 10.10.2010, 11:18
Mihahail
๏̯͡๏
offline
Опыт: 17,766
Активность:
Господа, вам не кажется, что вы немного отступили от темы?)
GhfDllT, Смешивать винапи и сипипи никто не запрещал, на правах имхо это довольно удобное сочетание..
ScorpioT1000, давайте не будем провоцировать холивар про Qt, винапи итд..?
Старый 11.10.2010, 23:59
ScorpioT1000
Работаем
offline
Опыт: отключен
ты хоть раз писал на винапи?) идк щас бы такого не говорил
Старый 12.10.2010, 00:35
GhfDllT

offline
Опыт: 3,980
Активность:
Цитата:
винапи говно
- а posix еще говнее (для поддержиния срача;)

GhfDllT добавил:
Цитата:
причем тут винапи?
- он тут при том, что у человека проблема с передачей функции в CreateThread.

GhfDllT добавил:
Цитата:
крутой код на плюсах выглядит даже круче, чем на шарпах
- ач то значит крутой?(в порядке срача;)
Старый 12.10.2010, 23:59
ScorpioT1000
Работаем
offline
Опыт: отключен
пошарьте разумные либы, ну или фреймворки на крайний случай, мы в 2010 году)
Старый 13.10.2010, 00:03
GhfDllT

offline
Опыт: 3,980
Активность:
ScorpioT1000, все-таки поясню, что Qt и иже с ними свего лишь оболочки(по своей сути). В ОС нету другого способа создать поток(процесс) из пользовательского кода кроме как вызвать CreateThread в Win и fork в posix. Нету! библиотеки просто прячут от тебя тот же говнокод с this-параметром чтобы ты работал ничего об этом не подозревая.
Цитата:
ты хоть раз писал на винапи?
- ну он вроде это пытается делать ;)

GhfDllT добавил:
Цитата:
пошарьте разумные либы, ну или фреймворки на крайний случай, мы в 2010 году)
- да никто и не спорит. Просто если тебе не интересно как это се работает внутри, то это твое дело. Мне вот интересно, хоть пишу все равно на разумных либах и фреймворках. В нашем бредовом сраче не хватает крутых системщиков, которые пишут крутые драйвера на чистых сях и асмах для разных осей. "Вот они бы начали - ООПшники(они же прикладные программисты) все вообще быдла тупое, не умеют даже контроллер запрограммировать, чтобы он с другим девайсом запахал, а еще программистами себя называют. Два потока на семафоре вокруг одного буфера разрулить не могут! Да если бы не мы, то кампы вообще бы не работали!"

так что окститесь братцы, ниочем спор. А Mihahail посоветую - познакомься с WinApi и да ну его...
Старый 13.10.2010, 00:15
ScorpioT1000
Работаем
offline
Опыт: отключен
к.о.?
Старый 13.10.2010, 00:17
GhfDllT

offline
Опыт: 3,980
Активность:
Да нет, просто срач, он здесь заправляет с 8-9 постов))))))))))))))))))
Старый 13.10.2010, 00:22
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 18:34.