这个软件用来实现局域网里监控。局域网内有一个服务器端和多个客户端。服务器端可以
监视各个客户端的动作并在某种程度上控制客户端。为了实现这些功能,一般情况下客户端
主动向服务端发送数据,但有一情况下服务端主动向客户端发送数据。
  Socket使用CSocket类。服务器端打算使用两个线程,一个界面线程,另一个负责与客户
机的数据交流,这样做的目的是为了防止因为WinSocket的死锁导致程序死法响应用户的操作。
  简单来说,就是怎样实现用工作线程来负责CSocket的消息的响应。

解决方案 »

  1.   

    CSocket內部就是通过工作者线程来实现消息的,所以你的担心是多虑。当然,你可以自己用Socket API来实现异步事件模型,自己来实现多线程。
      

  2.   

    在一工作线程内收发数据就行。注意,CSocket不是线程安全的,所以请注意不要在线程间传递CSocket*,如果需要传递的话,也得用上Detach/Attach.
      

  3.   

    我是想问怎样在工作线程中创建CSocket?工作线程在执行完线程函数后就不存在了,它创建的CSocket对象
    也无法响应Socket消息。而界面线程只有在主窗口销毁后才销毁,它就能一直响应Socket消息了。
      

  4.   

    请问DestistryDoctor,你是意思是不是在界面线程响应Socket消息,在工作线程中收发数据 ?
      

  5.   

    由CDialog派生出一个对话框类负责界面,比如class CTestDlg:CDialog
    由CSocket派生出一个socket类负责socket,比如class CTestSocket:CSocket
    可以把CTestSocket的构造函数设计成带参数的,参数就是此dialog的指针,比如CTestSocket::CTestSocket(CTestDlg* p_dialog).
    该socket可以设计一个CTestDlg*的成员变量=p_dialog,而另一方面对话框类也可以设计一个CTestSocket*的成员变量指向该socket,以便相互调用。
    这样行么?
      

  6.   

    http://www.xue68.com  上面说过这个问题的.
      

  7.   

    界面线程当然可以响应Socket的消息。不过这种情况最好由工作线程来处理。
    工作线程中创建/销毁/收/发
      

  8.   

    在工作线程中不能使用CSocket,要用就要使用socket api,自己实现多线程也很简单。
      

  9.   

    我现在就是工作线程中直接使用CSocket(这个CSocket是不同于界面线程的那个CSocket),一切正常