COM是一个更好的C++

  • 时间:
  • 浏览:0

不了解

第四轮面试官:因为加班严重你来吗?

应用进程间SendMessage,因为它基本但是我 调用指定窗口的窗口过程,当跨应用进程发消息的完后 ,无法调用指定窗口的窗口过程,在跨应用进程发送;

SendMessage直接调用窗口过程,那它有无也可不可不都上能 将消息发送到发送到应用进程的消息队列中呢?

7:互斥量

一八个多多应用进程互相SendMessage因为会因为死锁,A应用进程锁住一八个多多资源,向B应用进程发一八个多多消息,A应用进程挂起,这时因为B应用进程在解决A应用进程的消息也能 A应用进程锁住的资源,A因为发给B的消息还没有 解决完就时不时也能 返回,锁也没有 打开,B应用进程又用不了,消息也就解决不完,结果就死锁了。

句柄但是我 一八个多多整数,Windows为每一八个多多控件指定了一八个多多唯一的整数,通过这俩 整数和相关函数操作控件。

8:你了解沙箱,UAC相关的知识吗?

上周准备在公司内内外部转岗,面了八个部门windows客户端相关的工作,最终拿到八个Offer,主要涉及C++和Windows两大块内容,C++的题目基本都答上了,Windows时不时之前 我的弱项,在这里记录一下Windows相关的题目。有些答不上的问题就没列出来,还有些问题忘了,下面的答案有些大要素是我有些人的理解,有些是直接从网上copy的,有问题大伙儿儿也可不可不都上能 讨论。

3:Windows是缘何实现窗口刷新的?缘何实现窗口的立即刷新?

3:旋转锁

本文转自啊汉博客园博客,原文链接:http://www.cnblogs.com/hlxs/p/4091623.html

7:模态窗口的实现原理?模态窗口会因为崩溃吗?

while(GetMessage(&msg, NULL, 0, 0)) //获取一八个多多消息,成功之前 贴到 去msg中。

第四轮面试官:我没有 问题了,你还有什么要问的吗?

SendMessage:将一八个多多消息发送到指定窗口的窗口过程中,等窗口过程执行完了再返回;

PeekMessage:查看消息,有消息,就将数据存入MSG行态中,没有 消息就返回FALSE,不需要阻塞,但因为没有 更新区,也可不可不都上能 移除WM_PAINT消息,还也可不可不都上能 通过最后一八个多多参数来决定有无从队列中移除查看的消息;

PostMessage也可不可不都上能 在应用应用进程间发消息,但也能 结合WM_COPYDATA使用,WM_COPYDATA通过内存映射在应用应用进程间传递数据,PostMessage后映射文件的句柄就无效了。

WM_PAINT一般在消息队列中没有 消息的完后 才解决,有完后 大伙儿儿也能 立即刷新窗口,没有 就也能 UpdateWindow函数了,直接绕过消息循环,假如有一天更新区域不为空,将WM_PAINT消息直接发送到指定窗口过程即可。

6:信号量

第四轮面试官:你选着吗?

5:事件对象

因为窗口更新的区域不为空,UpdateWindow函数通过发送一八个多多WM_PAINT消息来更新指定窗口的客户区。函数绕过应用应用进程的消息队列,直接发送WM_PAINT消息给指定窗口的窗口过程,因为更新区域为空,则不发送消息。

消息的完后 ,发送应用进程会先挂起,由系统应用进程将消息发送到接收应用进程的完后 队列中,并设置QS_SENDMESSAGE标志,当系统检测到这俩 标志后,就会解决这俩 队列的消息,当这俩 消息被解决完后 ,调用SendMessage的应用进程就会被唤醒,就继续执行。

SendMessage也可不可不都上能 再应用进程间发消息,PostThreadMessage通过应用进程ID也可不可不都上能 在应用进程间发消息,将消息发送到指定应用进程的消息队列中。应用进程的消息队列默认是不需要创建的,因为应用进程的消息队列并之前 也能 的。通过ResumeThread(threadHwnd);也可不可不都上能 创建应用进程的消息队列。

{      

2:关键段

5:句柄是什么?

PostMessage:将消息发送到指定窗口所在应用进程的消息队列中,直接返回,消息有无被解决删剪真不知道;

接下来是第五轮面试……我但是我 内内外部转岗啊,面了五轮整整八个小时,最后哥还是从了这俩 部门。

SendMessage是也可不可不都上能 跨应用应用进程发消息的,通过FindWindow找到对方应用应用进程的窗口句柄,发一八个多多消息过去就行了,因为一八个多多应用应用进程间的内存是删剪独立的,也能 发指针,因为要发数据,就用WM_COPYDATA。

1:volatile

阿汉:不来

1:GetMessage和PeekMessage的区别?

Update Region不为空时,系统就会自动产生WM_PAINT消息,通过InvalidateRect和InvalidateRgn可把指定的区域加到窗口的Update Region中,通过解决WM_PAINT消息来实现窗口的刷新。 系统缘何没有调用Invalidate时发送WM_PAINT消息呢?又缘何也可不可不都上能 等应用消息队列为空时才发送WM_PAINT消息呢?这是因为系统把在窗口中的绘制操作当作五种 低优先级的操作,于是尽因为地推后做。不过完后 之前 有助提高绘制的传输时延:一八个多多WM_PAINT消息之间通过InvalidateRect和InvaliateRgn使之失效的区域就会被累加起来,否则在一八个多多WM_PAINT消息中一次得到更新,不仅能解决多次重复地更新同一区域,也优化了应用的更新操作。

只但是我 内核对象,就能用于应用应用进程间的同步,内核对象不属于任何应用应用进程,由系统管理。

2:SendMessage和PostMessage的区别?缘何跨应用进程发消息?缘何跨应用应用进程发消息?SendMessage在应用应用进程间发消息要注意什么?SendMessage能将消息发送到消息队列吗?PostMessage也可不可不都上能 在应用应用进程间发消息吗?一八个多多应用进程互相SendMessage会出问题吗?

Invalidate(hwnd); //将窗口设为不可用,因为更新区域不为空

阿汉:选着

4:读写锁

当GetMessage获取到的消息是WM_QUIT,返回的但是我 FALSE,while循环就退出了,消息循环也就终止了。

6:Windows实现应用进程间同步有什么方式?实现应用应用进程间同步又有什么方式?读写锁的实现原理是什么?

 DispatchMessage(&msg); //调用WinProc,将msg的各项信息传递给WinProc

}

读写锁实际是五种 特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则也能 对共享资源进行写操作。这俩 锁相对于自旋锁而言,能提高并发性,因为在多解决器系统中,它允许一并有多个读者来访问共享资源,最大因为的读者数为实际的逻辑CPU数。写者是排他性的,一八个多多读写锁一并也可不可不都上能 有一八个多多写者或多个读者 (与CPU数相关),但也能 一并既有读者又有写者。我虽然他虽然但是我 对关键段和内核事件对象的封装。写的完后 独占,读的完后 共享。

因为因为窗口崩溃,模态窗口显示的完后 ,除了父窗口不可用之外,有些的窗口之前 可用的,因为也能 的一八个多多资源在别的地方被释放了,而在模态窗口中使用的完后 ,没有 判断因为就会因为崩溃。

10:句子Windows的内存管理,缘何实现内存共享?

4:Windows消息循环有什么函数,本人的作用是什么?消息循环是缘何退出的?

UpdateWindow(hwnd); //立即刷新窗口 

模态窗口虽然但是我 在当前窗口调用系统的消息循环,响应用户的操作,将相关的消息发送到对应的窗口。将父窗口设为不可用,即也能 响应用户的操作,在关闭当前窗口的完后 ,将父窗口设为可用,并退出消息循环。

9:缘何实现应用进程间发消息?应用进程的消息队列默认会创建吗?

GetMessage:获取回息队列中的一八个多多消息,存入MSG中,并从消息队列中移除,因为消息队列中没有 消息就会阻塞;

 TranslateMessage(&msg); //消息进行必要的解决转换。     

也可不可不都上能 啊,比如发送一八个多多WM_PAINT消息,这是一八个多多队列消息,也可不可不都上能 占据 无效区域的情况表下,才会解决WM_PAINT消息;

FileMapping用于将占据 于磁盘的文件贴到 去一八个多多应用应用进程的虚拟地址空间,并在该应用应用进程的虚拟地址空间中产生一八个多多区域用于“存放”该文件,这俩 空间就叫做 File View,系统并一并产生一八个多多File Mapping Object(存放于物理内存中)用于维持这俩 映射关系,完后 当多个应用应用进程也能 读写那个文件的数据时,它们的File View虽然对应的之前 同一八个多多File  Mapping  Object,完后 做可节省内存和保持数据的同步性,并达到数据共享的目的。