Что случилось, ребята, надеюсь, вы в порядке! , проблема в том, что я делаю приложение клиент/сервер чата, но выполняю некоторые тесты с сервером, я узнал, что у меня проблема с отправкой сообщений. Я использую на структуру, розетку и DWORD WINAPI тему ... Поэтому код в структурах является:Struct and Thread DWORD WINAPI
DWORD WINAPI threadSendMessages(LPVOID vpParam); //THREAD
typedef struct messagesServerChat{ //STRUCT
const char *messageServEnv;
}MESSAGE, *SMESSAGES;
затем в основном методе я называю структуру использовать константный обугленный messageServEnv, HeapAlloc к дать некоторую память к потоку, который собирается отправить сообщение и переменный обугленный, которую я использую, чтобы сохранить сообщение
char mServer[1024] = ""; //variable to pre-store the message
SMESSAGES messages; //call the struct
messages = (SMESSAGES) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MESSAGE));
в основном методе, я прошу пользователь вставить сообщение, которое он хочет отправить и Я использую структуру для хранения сообщения и отправляю его в поток в качестве параметра:
cout<<"Dear user, please insert your message: ";
setbuf(stdin, NULL);
fgets(mServer, 1024, stdin);
messages->messageServEnv = mServer;
DWORD hSend; //send the parameters to the thread function
HANDLE sendThread = CreateThread(0, 0, threadSendMessages, mServer, 0, &hSend);
и, наконец, код функции резьбы
DWORD WINAPI threadSendMessages(LPVOID lpParam){
SMESSAGES messages;
messages = (SMESSAGES)lpParam;
int mesa;
mesa = send(sConnect, (char *)messages->messageServEnv, sizeof messages->messageServEnv, 0);
//sConnect is the socket
//messages = to use the struct, and messageServEnv is the struct data that should contain the message
return 0;
}
--Edit-- исправить много проблем, используя решение Реми, но, может быть, я что-то ... в threadSendMessages темы отсутствует (SMESSAGES lpMessage)
char *ptr = messages->messageServEnv;
int len = strlen(messages->messageServEnv);
я получаю и ошибка, которая говорит, что сообщения в undifined, то я изменил:
SMESSAGES messages;
char *ptr = messages->messageServEnv;
int len = strlen(messages->messageServEnv);
теперь я могу использовать сообщения и значение структуры messageServEnv но если я начало отладки Visual Studio и я пытаюсь отправить сообщение, я получаю сообщение об ошибке: сообщений используются без инициализации, то я изменю эту часть в
SMESSAGES messages = new MESSAGE;
и теперь я могу отправлять сообщения клиента, но только символы и замусоривание код
Что касается редактирования, см. Мой обновленный ответ. –