В настоящее время я разрабатываю многопоточное сетевое приложение (ну, на самом деле два, но с общей базой), и использую nCurses для интерфейса.
Проблема в том, что в настоящее время я пытаюсь запустить два потока; поток GUI ожидает срабатывания клавиатуры и, когда это произойдет, создаст сообщение в памяти. Когда нажата клавиша ввода, это передается потоку сервера, который передает его по сети.
Поток сервера прослушивает соединение. Когда он получает один, он входит в цикл; посмотрите, есть ли какие-либо данные от соединения, если есть, отправьте их в поток GUI, который затем отобразит их. Затем проверьте что-нибудь из графического интерфейса, отправьте по сети и так далее.
Проблема в том, что я могу нормально получать сообщения (до этого момента тестировал с помощью Telnet...), и сообщение отлично попадает в поток графического интерфейса. printf отобразит это просто отлично (однако это кажется грязным, смешивая printf и nCurses), но printw просто представит мне новую строку для моей проблемы. Когда я индивидуально обращаюсь к персонажам, кажется, что все работает.
char* messageRcv;
messageRcv = stream_rcv_nblock(stream);
if(messageRcv != NULL) {
if(messageRcv[0] != '\xFF') {
printw("%s", messageRcv);
refresh();
}
free(messageRcv);
}
Это код, который теоретически должен отображать сообщение. Для справки, 0xFF на данный момент действует как код «соединение закрыто». Быстро и грязно, но сейчас очень рано, так что мне все равно.
Любая помощь в этом вопросе будет принята с благодарностью, так как у меня ничего нет. Спасибо.
РЕДАКТИРОВАТЬ: printw() использует строку формата "%s", однако ошибка все еще возникает.