熬之滴水穿石:一切从windows编程开始(4)

                                                               4--winodws编程的核心函数

实际上我是从delphi的RAD工具走上windows编程这条道上,所以最初我接触到了windows编程是非常简单的。在很长一段时间,我并没有使用过真正意义上的windowsAPI函数,delphi强大的VCL框架屏蔽了一切。让我对于windows编程上面理解很是片面,很是肤浅。我一直以为拖动几个控件写几个事件代码就是windows编程。直到后来我看到我一同事用VC写程序,我从编辑器里看到了一些我从未看到过的代码,那样的过程让我引起一阵阵的恐慌。在对windows系统运行机制并不是熟悉的情况下,WINDOWS编程是一本很难啃下的骨头,尤其后来做到多线程消息通讯编程和IOCP编程时发现了这方面的不足。

但最为关键的还是要知道原理,知道windows窗口处理的机制到底是怎么一回事,把这个搞明白了。再看看这些那些核心的API函数也不难理解了!那些年时常看到许多人在简历中写精通windows编程,其实真正精通windows又能有几人了。不过真正理解windows编程是可以通过几个函数加深理解的,而这些都又跟操作系统原理相关的。以这些函数为切入点,深入进去也许你会发现会简单些。我对于windows的重新了解都是从我那笔陈年旧账的解决过程开始的,一切都是基于windows系统进程的状态开始的。所以我对于这几个函数很有印象。

WaitForSingleObject()

官方的解释为:该函数用来检测hHandle事件的信号状态,在某一线程中调用该函数时,线程暂时挂起,如果在挂起的dwMilliseconds毫秒内,线程所等待的对象变为有信号状态,则该函数立即返回;如果超时时间已经到达dwMilliseconds毫秒,但hHandle所指向的对象还没有变成有信号状态,函数照样返回。参数dwMilliseconds有两个具有特殊意义的值:0和INFINITE。若为0,则该函数立即返回;若为INFINITE,则线程一直被挂起,直到hHandle所指向的对象变为有信号状态时为止。

官方描述非常专业,实际理解起来却很是简单:其实这个函数就是在等待时间发生时使用的,该函数就是让自己STOP,等待事件发生而已。

GetTickCount()

官方解释为:从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值是DWORD。一般用于实时控制,该方法运用比较多。当然该方法你如果觉得还不够精确,如果需要更精确的话,那就需要另外Q的QueryPerformanceFrequency()和QueryPerformanceCounter()方法,该方法可更用于基于CPU转精度所需的数据

最后是Sleep()方法了,该方法就是让当前线程进行休眠状态,也是通常我们说起的挂起。在线程编码中,该方法是用频率很多的,尤其在循环里面。我对自己所学的东西进行的反思就是从这个小小的sleep()开始的。在技术研发的路上,切误轻视一切你认为非常简单,但是正是这样的简单让你有时候却一筹莫展。

                                                                                                                                                                  (未完待续.........)

原文地址:https://www.cnblogs.com/javawebsoa/p/3084569.html