![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Пользователь
Регистрация: 19.10.2009
Сообщений: 25
|
![]()
сокеты пробую ковырять, вырезал из примеров откуда-то с форума...
на форме по нажатию клавиши выполняются: Код:
Код:
CreateThread(NULL,NULL,ThreadFunc,& client_socket,NULL,&thID); понятно что это не консоль и в функцию надо передавать параметры раз определены: Код:
подскажите как быть? |
![]() |
![]() |
![]() |
#2 | ||
Форумчанин
Регистрация: 09.09.2008
Сообщений: 395
|
![]() Цитата:
Когда вы пишите так: Код:
Т.е. в данном случае так не правильно: Код:
Код:
Цитата:
поставьте "static". Должно получиться так: Код:
|
||
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 19.10.2009
Сообщений: 25
|
![]()
дада, спасибо
в поиске решения этой проблемы я натыкался на предполагаемое решение: сделать все функции статическими, либо все глобальными... static пробовал писать, однако дальше возникает ошибка С2664 касающаяся именно этого 3его параметра: error C2664: 'CreateThread' : cannot convert parameter 3 from 'DWORD (__clrcall *)(LPVOID)' to 'LPTHREAD_START_ROUTINE' после этого начинаешь колдовать, пробовать менять тип - не получается |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 19.10.2009
Сообщений: 25
|
![]()
как то решилась проблема через:
CreateThread(NULL,NULL,(LPTHREAD_ST ART_ROUTINE)ThreadFunc,&client_sock et,NULL,&thID); и подключением библиотек вот теперь виснет на while((client_socket=accept(s,(sock addr *)&client_addr, &client_addr_size))) |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 19.10.2009
Сообщений: 25
|
![]()
стало понятно почему циклится и виснет)
дальше проблема снова проблема по сабжу: при подключении клиента программа вылетает с неуловимым исключением на строке со злосчастным CreateThread(NULL,NULL,(LPTHREAD_ST ART_ROUTINE)ThreadFunc,&client_sock et,NULL,&thID); как быть? и это при том что в консоле работает без всех этих проблем. |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
![]()
fawr
CreateThread(NULL,NULL,(LPTHREAD_ST ART_ROUTINE)ThreadFunc,&client_sock et,NULL,&thID); убери отсюда приведение типа к LPTHREAD_START_ROUTINE - это лишнее и только захламляет код и оттягивает ошибку до момента выполнения, что мы и наблюдаем. правильный формат вызова: CreateThread(NULL, 0, &ThreadProc, ..., 0, &threadID); прототип функции-мембера, работающей в потоке: static DWORD WINAPI ThreadProc(void* Param); если при этом происходят ошибки компиляции, значит код написан криво. Возможно, это китайский компилятор. Выкинь его и возьми нормальный.
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 19.10.2009
Сообщений: 25
|
![]()
думал обойтись без потоков, но если делать приложение клиент-сервер - не обойтись.
прочитал что CreateThread это не очень, а _beginthreadex лучше. функция вот: static void WINAPI ThreadFunc(void* Param) создание потока вот: _beginthreadex(NULL,0,ThreadFunc,&c lient_socket,0,&thID); о5 двадцать пять - теперь не стыкуется: error C2664: '_beginthreadex' : cannot convert parameter 3 from 'void (__clrcall *)(void *)' to 'unsigned int (__stdcall *)(void *)' http://programmersforum.ru/showthread.php?t=118035 - тут советуют __clrcall вообще отключить... каким образом это сделать? или можно как-то конвертировать? |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 05.10.2011
Сообщений: 368
|
![]()
Rififi же написал как надо объявлять функцию
static DWORD WINAPI ThreadProc(void* Param); а у вас static void WINAPI ThreadFunc(void* Param)
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
|
![]() |
![]() |