我有典型的聊天应用程序。
客户端使用两个线程实现。
线程1
do {
show menu
read option
case option
1: option1
2: option2
.
.
.
5:end
end case
while (!end)
主题2:
do {
read message from socket
display message
while (!end)
一个问题是Thread1要快,所以在处理选项之后它再次显示菜单,然后Thread2才能显示它的消息。 我通过让Thread1睡眠1000毫秒来解决这个问题,但不知道是否有更好的方法可以做到这一点。
另一个是:当客户端什么都不做时,屏幕上只有一条消息要求处理选项。如果另一个客户端向他发送消息,则此消息显示在promt之后,因此信息很混乱:这是客户在从另一个客户端收到消息后将看到的内容的示例。
1.- Print users conected
2.- Send message to all
3.- Send message to a user
4.- Quit
Choose an option: Message received from user "david": hello!
有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
您的第一个问题可以通过线程同步来解决。这是一个沉重的主题,但线程一般,所以支持自己的一些学习
线程1
等待用户做出选择
用户做出选择
过程 - >通知线程2处理
等待线程2没问题
等待用户做出一个chocie
线程2
等待线程1的处理
通过插座发送数据
通知线程1它没问题
等待从线程1处理
你的第二个问题可以用gui来解决。没有很多基于控制台的聊天程序,这是有原因的。 unix系统有ncurses来处理控制台中的文本定位,但是windows只有hacks相当于ncurses。你可能想看一下
答案 1 :(得分:0)
如果您的线程与管道通信,您可以让第一个线程等待第二个线程说“我已经完成了。”