none
网络编程中客户端多线程的问题 RRS feed

  • 问题

  • 想实现类似QQ的多个用户并行操作的服务端程序。使用WinSock阻塞模式编程。就是希望服务端在监听过程中,每来一个accept,就创建一个线程。在这个线程中创建一个对话框,服务端和客户端所有的通信都是通过这个客户端完成的,当客户端关闭时,对应的socket也应该关闭。
    开始想使用用户界面线程来创建。可是发现用户界面线程无法传递所需要的SOCKET参数。不知道有没有办法解决,希望高手大师们能够不啻赐教。
    regards.
    2009年12月21日 2:56

答案

  • AfxBeginThread是有两个版本的:

    CWinThread*
     AfxBeginThread(
    
    AFX_THREADPROC pfnThreadProc ,
    LPVOID pParam ,
    int nPriority = THREAD_PRIORITY_NORMAL,
    UINT nStackSize = 0,
    DWORD dwCreateFlags = 0,
    LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
    );
    CWinThread* AfxBeginThread(
    CRuntimeClass* pThreadClass ,
    int nPriority = THREAD_PRIORITY_NORMAL,
    UINT nStackSize = 0,
    DWORD dwCreateFlags = 0,
    LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
    );
    你用第一个版本,第二个参数LPVOID pParam 就是用来传递参数的。 通常通过pParam可以传递线程启动时所需的参数。

    另: CWinThread 是继承于CCmdTarget 类的,具有消息泵的能力,如在线程运行过程中,需要传递数据给线程,可向该线程发送消息。
    • 已标记为答案 SplendourGModerator 2009年12月22日 1:30
    • 取消答案标记 Rolbin 2009年12月22日 6:29
    • 已标记为答案 Rolbin 2010年1月27日 1:21
    2009年12月21日 9:17
    版主

全部回复

  • 在线等候,希望高手们能拔刀相助
    2009年12月21日 2:57
  • 这个问题怎么用线程处理
    2009年12月21日 2:59
  • 那该如何解决呢?
    2009年12月21日 3:03
  • 使用以下的线程创建函数创建了一个用户界面线程。
    CWinThread* AfxBeginThread(CRuntimeClass* pThreadClass,
                          int nPriority=THREAD_PRIORITY_NORMAL,
                          UINT nStackSize=0,
                          DWORD dwCreateFlags=0,
                          LPSECURITY_ATTRIBUTES lpSecurityAttrs=NULL);
        然后我在子线程里创建了一个对话框。在实现对话框中的功能时,我突然发现自己需要传递主线程中的一个参数进来,而且由于这个线程创建函数可能要运行多次 (每次实现的功能也是弹出一个对话框,要能并行操作。)所以我很想知道这个用户界面线程创建函数怎么传递参数进来,希望高手多加指点。
    2009年12月21日 3:04
  • AfxBeginThread是有两个版本的:

    CWinThread*
     AfxBeginThread(
    
    AFX_THREADPROC pfnThreadProc ,
    LPVOID pParam ,
    int nPriority = THREAD_PRIORITY_NORMAL,
    UINT nStackSize = 0,
    DWORD dwCreateFlags = 0,
    LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
    );
    CWinThread* AfxBeginThread(
    CRuntimeClass* pThreadClass ,
    int nPriority = THREAD_PRIORITY_NORMAL,
    UINT nStackSize = 0,
    DWORD dwCreateFlags = 0,
    LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
    );
    你用第一个版本,第二个参数LPVOID pParam 就是用来传递参数的。 通常通过pParam可以传递线程启动时所需的参数。

    另: CWinThread 是继承于CCmdTarget 类的,具有消息泵的能力,如在线程运行过程中,需要传递数据给线程,可向该线程发送消息。
    • 已标记为答案 SplendourGModerator 2009年12月22日 1:30
    • 取消答案标记 Rolbin 2009年12月22日 6:29
    • 已标记为答案 Rolbin 2010年1月27日 1:21
    2009年12月21日 9:17
    版主