VC++编程1、实现一个自定义的消息,应该在几个地方进行添加修改(即实现步骤)
2、MFC中起线程的函数是哪一个?
3、Post Message 与Send Message 发送消息有何差别?
6、线程同步与互斥你采用什么方法实现?
2、建立一个TCP连接,写出服务端和客服端的实现顺序。
我的一个同学要从事VC,面试的题目,让我帮他问一下,请大家帮忙!!
2、MFC中起线程的函数是哪一个?
3、Post Message 与Send Message 发送消息有何差别?
6、线程同步与互斥你采用什么方法实现?
2、建立一个TCP连接,写出服务端和客服端的实现顺序。
我的一个同学要从事VC,面试的题目,让我帮他问一下,请大家帮忙!!
解决方案 »
- 求用GDI+Image *image加载一张Png图片
- vc6.0编程,编写个播放器怎么编码实现左右声道的设置呢?
- 关于实时判断数据库是否断开的一点疑问
- 为什么没进入onTimer
- 为什么我用ATL向导生成的代码不能调用onCreate方法?『VC6』
- to VeryBigbug and all
- 1000分的大问题--在线等候---win2000里,系统dll被映射进每个进程的私有地址空间,那我在一个进程里改变了某个dll的代码,为什么不会影响其
- 请问如何实现右键菜单获取选中的文件名!
- SPI的WSPSend中取到socket套接字后,怎么向源地址发送数据?
- 请问这样的界面是怎么实现的呢?
- atl和wtl的头文件要安装什么才有啊,我怎么装了vs.net和platform sdk怎么都没有啊?
- 请教 vc 下随机函数是哪个?
(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;
}
具体使用看MSDN
#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)
{
//加入实现代码
}
3.PostMessage 和SendMessage的区别主要在于是否等待其他程序消息处理。PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;而SendMessage必须等待其他程序处理消息后才返回,继续执行。这两个函数的返回值也不同,PostMessage的返回值表示PostMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。
6.信号量
2、beginthread 或 createthread
3、post是把消息发送到队列中,有系统调度,send是发送到应用程序,不处理不返回。
6、线程同步可以采用event。
SendMessage:等待消息投递到达后再返回
Send Message 等到消息处理函数执行结束后才返回。
如果你对消息执行的顺序和及时性要求不高的话最好用Post Message
如果你对消息执行的时序有严格要求,且发消息的线程执行速度(发消息的频率)较快的话(第一条消息还没执行结束就发了第二条消息),一定要用Send Message
(1)、CMutex m_Mutex;
m_Mutex.Lock(); //锁定
....//你要求同步与互斥我操作
m_Mutex.Unlock(); //解锁
(2)、临界区
CCriticalSection m_cs; //先定义一个临界区
//加入到线程中
CSingleLock sLock( &m_cs );
sLock.Lock();
....//你要求同步与互斥我操作
sLock.Unlock();
^_^ 来吧!
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内核级的编程