C 游标在错误的窗口中等待
我正在开发一个简单的聊天工具。聊天客户端基于ncurses,有两个窗口:C 游标在错误的窗口中等待,c,sockets,cursor,client,ncurses,C,Sockets,Cursor,Client,Ncurses,我正在开发一个简单的聊天工具。聊天客户端基于ncurses,有两个窗口: “输入”窗口,用户在其中输入消息 “输出”窗口,用户在其中查看其他用户发送的消息 我的客户端有两个线程,一个用于从用户获取消息,另一个用于显示来自服务器的消息 当用户键入消息时,它们将按预期显示在输入窗口中 问题是,一旦发送了消息,光标就在输出窗口中等待,直到按下一个键 这相当烦人(当客户端失去焦点时也会发生这种情况)。如何强制光标位于某个窗口中 相关代码如下: WINDOW* in; WINDOW* out; .
- “输入”窗口,用户在其中输入消息
- “输出”窗口,用户在其中查看其他用户发送的消息
WINDOW* in;
WINDOW* out;
...
void chatter(int sockfd)
{
...
pthread_create(&sendt, NULL, sender, &sockfd);
while (1)
{
bytes = recv(sockfd, msg, sizeof msg - 1, 0);
if (bytes != 0)
{
if (bytes == -1)
{
wprintw(out, "Error receiving message: %s\n", strerror(errno));
}
else
{
msg[bytes] = '\0';
wprintw(out, "%s", msg);
}
wrefresh(out);
}
else
{
break;
}
}
pthread_cancel(sendt);
pthread_detach(sendt);
...
}
void* sender(void* pfd)
{
char msg[MAX_MSG] = "";
int sockfd = *(int *)pfd;
while (1)
{
mvwgetnstr(in, 0, 0, msg, sizeof msg - 2);
strcat(msg, "\n");
if (send(sockfd, msg, strlen(msg) + 1, 0) == -1)
{
wprintw(out, "Error sending message: %s\n", strerror(errno));
}
werase(in);
}
return NULL;
}
在调用mvwgetnstr()之前,您是否尝试过调用wmove()和wrefresh()?@Craig是的,它不起作用。这似乎也会引起奇怪的性格问题。我想这与读写同时发生有关。ncurses不是线程安全的。创建一个执行所有ncurses工作的线程,或者确保在ncurses调用周围有锁。