VC++编程1、实现一个自定义的消息,应该在几个地方进行添加修改(即实现步骤)
2、MFC中起线程的函数是哪一个?
3、Post Message 与Send Message 发送消息有何差别?
6、线程同步与互斥你采用什么方法实现?
2、建立一个TCP连接,写出服务端和客服端的实现顺序。 
我的一个同学要从事VC,面试的题目,让我帮他问一下,请大家帮忙!!

解决方案 »

  1.   

    1.(1)先是定义一个消息,如#define WM_MYMESSAGE WM_USER + 5
      (2)再在你要添加消息处理的类的.h文件中添加处理函数,添加的位置要注意,如:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg void OnTestStart();
    //}}AFX_MSG
      afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
    DECLARE_MESSAGE_MAP()
    (3)在.cpp文件中加
    BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    //{{AFX_MSG_MAP(CMainFrame)
    ON_WM_CREATE()
    ON_COMMAND(ID_TEST_START, OnTestStart)
    //}}AFX_MSG_MAP
             ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
    END_MESSAGE_MAP()
    同样要注意位置
    (4)
    添加函数定义
    LRESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
    {
      ……
      return 1;
    }
      

  2.   

    2,起线程的函数为AfxBeginThread(TestThreadProc, GetSafeHwnd(), THREAD_PRIORITY_NORMAL);
    具体使用看MSDN
      

  3.   

    1、.h文件
        #include "头文件"    #define WM_YOUR WM_USER+1    class CYourClass:public CDialog
       {     // Generated message map functions
    //{{AFX_MSG(YourClass) afx_msg void OnFunc(WPARAM wParam,LPARAM lParam);  //自定义消息函数 //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
        }    .cpp文件         BEGIN_MESSAGE_MAP(CYourClass, CDialog)
    //{{AFX_MSG_MAP(CYourClass)
     
              ON_MESSAGE(WM_YOUR,OnFunc)  //需要加入的代码
             //}}AFX_MSG_MAP
             END_MESSAGE_MAP()         void CYour::OnFunc(WPARAM wParam,LPARAM lParam)
              {
                 //加入实现代码
               }
      

  4.   

    2.AfxBeginThread
    3.PostMessage 和SendMessage的区别主要在于是否等待其他程序消息处理。PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;而SendMessage必须等待其他程序处理消息后才返回,继续执行。这两个函数的返回值也不同,PostMessage的返回值表示PostMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。
    6.信号量
      

  5.   

    1、两个地方,发送和接收
    2、beginthread 或 createthread
    3、post是把消息发送到队列中,有系统调度,send是发送到应用程序,不处理不返回。
    6、线程同步可以采用event。
      

  6.   

    2、MFC中起线程的函数:AfxBeginThread(ThreadFunc,this);  //
      

  7.   

    3、PostMessage:只负责把消息送入消息队列,返回时不代表消息已送达
       SendMessage:等待消息投递到达后再返回
      

  8.   

    3,Post Message 将消息发到消息队列中即返回
    Send Message 等到消息处理函数执行结束后才返回。
    如果你对消息执行的顺序和及时性要求不高的话最好用Post Message  
    如果你对消息执行的时序有严格要求,且发消息的线程执行速度(发消息的频率)较快的话(第一条消息还没执行结束就发了第二条消息),一定要用Send Message
      

  9.   

    线程同步用event,但具体实现细节很多
      

  10.   

    6、线程同步与互斥采用的常规方法:
       (1)、CMutex m_Mutex;
              m_Mutex.Lock();   //锁定
              ....//你要求同步与互斥我操作
              m_Mutex.Unlock(); //解锁
       (2)、临界区
              CCriticalSection m_cs;  //先定义一个临界区
              
              //加入到线程中
              CSingleLock sLock( &m_cs );
    sLock.Lock();
    ....//你要求同步与互斥我操作
    sLock.Unlock();
      

  11.   

    这么多问题啊!
    ^_^  来吧!
    1
    如何自定义消息
    .h中
    #define WM_DO_MESSAGE WM_USER+100//{{AFX_MSG(...)
        ......
        //}}AFX_MSG
        afx_msg LRESULT OnDoMessage(WPARAM wParam,LPARAM lParam);
             ......
        DECLARE_MESSAGE_MAP()
    .cpp中
    BEGIN_MESSAGE_MAP(...)
        //{{AFX_MSG_MAP(...)
        ......
        //}}AFX_MSG_MAP
        // Global help commands
        ON_MESSAGE(WM_DO_MESSAGE,OnDoMessage)
             ......
    END_MESSAGE_MAP()LRESULT CTest8Dlg::OnDoMessage(WPARAM wParam,LPARAM lParam) 
    {
                      .....你的操作;//如int k=(int)wParam;等等
            return 0L;
    } 2
    线程的创建使用CreateThread函数,或者AfxBeginThread(),他们的参数可以查MSDN3
    这里讲的很清楚
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_CWnd.3a3a.SendMessage.asp6
    线程的同步和户次常用的有四个关键代码段 互斥量 信号灯 事件内核对象
    建议你看看<< windows 核心编程 >> 此书很好,详细地讲述了Windows内核级的编程