1) 用户双击鼠标时产生的消息序列,下面正确的是()
A) WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDOWN,WM_LBUTTONUP
B) WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONUP,WM_LBUTTONDBLCLK
C) WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDOWN,WM_LBUTTONDBLCLK
D) WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDBLCLK,WM_LBUTTONUP
解答:D
双击即点击左键两下,第一次触发LBUTTONDOWN和LBUTTONUP,第二次点击时触发双击事件LBUTTONDBLCLK(doubleclick),放掉再触发LBUTTONUP。
2)以下哪些对象可用于Windows进程间通信?
A) 事件
B) 临界区
C) 互斥量
D) 共享内存
解答:D
进程间通信方法有:文件映射、共享内存、匿名管道、命名管道、邮件槽、剪切板、动态数据交换、对象连接与嵌入、动态连接库、远程过程调用等。
共享内存是在两个正在运行的进程之间传递数据的一种非常有效的方式。共享内存允许两个不相关的进程访问同一个逻辑内存。由于它并没有提供同步机制,所以我们通常需要用其他的机制来同步访问共享的内存。
来张干货图吧:不仅仅windows支持的通信方式,其他系统也有。
事件、临界区、互斥量、信号量是线程同步。共享内存是进程同步。所以,选D)。
3)关于sendmessage和postmessage的区别,下面的说法错误的是()
A) postmessage发出消息后,将消息放到消息队列中,马上返回
B) sendmessage发出消息后,一直等到该消息执行完毕,才返回
C) 用sendmessage给其他线程创建的窗口发送消息时,消息也会进消息队列
D) 用2个函数只能给当前进程的窗口发送消息
解答:D
PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。所以A正确。
SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息投放函数。所以B正确。
当某线程调用sendmessage给别的线程创建的窗口时,发送的消息首先追加到接收线程的发送消息队列,发送线程处于空闲状态,等待接收线程处理完他的消息返回给发送线程的应答队列,等到后发送线程被唤醒取得应答队列的消息 (就是处理完消息的返回值),继续执行。所以C正确。
由于sendmessage和postmessage都可以给其他线程发送消息。D项里的“只能给当前线程”错误。