Win32 API 常用函数之一

 【线程】
       创建线程的函数是CreateThread,其原型如下:
HANDLE WINAPI CreateThread
(
  LPSECURITY_ATTRIBUTES lpThreadAttributes, 
  SIZE_T dwStackSize,
  LPTHREAD_START_ROUTINE lpStartAddress,
  LPVOID lpParameter,
  DWORD dwCreationFlags,
  LPDWORD lpThreadId
);
       参数说明:
    1. 第一个参数关于安全性,通常值为NULL。Windows会设置为默认安全级别。
    2. 第二个参数关于堆栈大小,(关于线程的堆栈,以后有机会一定仔细学习)对于简单应用,同安全性相同,使用默认的大小即可,一般传入0。
    3. 第三个参数是线程函数名,用于指明想要新线程执行的线程函数的地址。线程函数可以使用任何名字。实际上,如果在应用程序中拥有多个线程函数,必须为它们赋予不同的名字,否则编译器/链接程序会认为你为单个函数创建了多个实现函数。
    4. 第四个参数是线程函数的传入参数,在线程启动执行时将该参数传递给线程函数。该参数提供了一个将初始化值传递给线程函数的手段。该初始化数据既可以是数字值,也可以是指向包含其他信息的一个数据结构的指针。
    5. 第五个参数是设定用于控制创建线程的其他标志。它可以是两个值中的一个。如果该值是0,那么线程创建后可以立即进行调度。如果该值是CREATE_SUSPENDED,系统可以完整地创建线程并对它进行初始化,但是要暂停该线程的运行,这样它就无法进行调度。
    6. 第六个参数是线程的ID,当传入NULL时,表示并不关心线程的ID。
    7. 返回值:线程函数必须返回一个值,它将成为该线程的退出代码。
             线程函数(实际上是你的所有函数)应该尽可能使用函数参数和局部变量。当使用静态变量和全局变量时,多个线程可以同时访问这些变量,这可能破坏变量的内容。然而,参数和局部变量是在线程堆栈中创建的,因此它们不太可能被另一个线程破坏。
             在实际coding中,根据线程的作用,可以把线程封装在一个类里,如果需要让线程唯一,那么线程函数应该为static的;如果想让线程不唯一,那么就需要以成员函数的形式传入。不论上述两种情况的哪一种,都可以让第四个参数传入this,这样做比较方便。
             如果线程能够返回,就可以确保下列事项的实现:
        1. 在线程函数中创建的所有C + +对象均将通过它们的撤消函数正确地撤消。
        2. 操作系统将正确地释放线程堆栈使用的内存。
        3. 系统将线程的退出代码(在线程的内核对象中维护)设置为线程函数的返回值。
        4. 系统将递减线程内核对象的使用计数。
                 ExitThread和TerminateThread都可以作为线程退出的函数,不过区别明显:
                 ExitThread函数将终止线程的运行,并导致操作系统清除该线程使用的所有操作系统资源。但是,C++资源(如C++类对象)将不被撤消。
                 TerminateThread函数终止线程时,会造成如下结果:不会对关键代码段对象进行操作,也就是说,如果线程中存在关键代码段,那他不会被销毁。分配的资源也不会从堆中撤销。线程状态被设置成inconsistent。当线程终止运行时,DLL通常接收通知。但使用TerminateThread 强迫线程终止,DLL就不接收通知。

          【关键代码段】
                 CRITICAL_SECTION 变量被用于控制多线程访问共享区的互斥行为。
                 在使用关键代码段之前,要对 CRITICAL_SECTION进行初始化,调用Initialize函数,需要使用互斥时调用Enter函数,结束互斥行为时使用Leave函数,销毁变量时使用Delete函数,原型如下:
          void  InitializeCriticalSection( 
            LPCRITICAL_SECTION lpCriticalSection 
          ); 
          void  EnterCriticalSection( 
            LPCRITICAL_SECTION lpCriticalSection 
          ); 
          void  LeaveCriticalSection( 
            LPCRITICAL_SECTION lpCriticalSection 
          ); 
          void  DeleteCriticalSection( 
            LPCRITICAL_SECTION lpCriticalSection 
          ); 
              EnterCriticalSection 函数负责查看该结构中的成员变量。这些变量用于指明当前是哪个变量正在访问该资源。如果成员变量指明,调用线程已经被赋予对资源的访问权,那么 EnterCriticalSection 便更新这些变量,以指明调用线程多少次被赋予访问权并立即返回,使该线程能够继续运行。
              如果成员变量指明,一个线程(除了调用线程之外)已被赋予对资源的访问权,那么
          EnterCriticalSection 将调用线程置于等待状态。这种等待的线程不会浪费任何CPU时间。系统能够记住该线程想要访问该资源并且自动更新 CRITICAL_SECTION 的成员变量,一旦目前访问该资源的线程调用 LeaveCriticalSection 函数,该线程就处于可调度状态。
             
          LeaveCriticalSection 要查看该结构中的成员变量。该函数每次计数时要递减1,以指明调用线程多少次被赋予对共享资源的访问权。如果该计数大于0,那么 LeaveCriticalSection 不做其他
          任何操作,只是返回而已。如果该计数变为0,它就要查看在调用
          EnterCriticalSection 中是否有别的线程正在等待。如果至少有一个线程正在等待,它就更新成员变量,并使等待线程中的一个线程(“公正地”选定)再次处于可调度状态。如果没有线程正在等待, LeaveCriticalSection 函数就更新成员变量,以指明没有线程正在访问该资源。
              如果不想等,想得到要么能够使用资源,要么去做别的事情的方法,就用Try
          EnterCriticalSection,当能够使用资源时,该函数返回TRUE,不能时返回FALSE。他不会把自己加入等待队列中去。

              使用关键代码段时有一些技巧:
            1. 每个共享资源使用一个CRITICAL_SECTION变量,如果应用程序中拥有若干个互不相干的数据结构,应该为每个数据结构创建一个CRITICAL_SECTION变量。这比只有单个CRITICAL_SECTION结构来保护对所有共享资源的访问要好(效率高)。
            2. 当同时访问多个资源时,必须始终按照完全相同的顺序请求对资源的访问。
            3. 不要长时间运行关键代码段,当一个关键代码段长时间运行时,其他线程就会进入等待状态,这会降低应用程序的运行性能。




              • 0
                点赞
              • 0
                收藏
                觉得还不错? 一键收藏
              • 0
                评论
              ### 回答1: Win32 API函数参考手册是一本详细记录了Windows操作系统中可用的各种API函数的参考书籍。API函数是一系列在编程时可以调用的函数,通过调用这些函数,我们可以直接使用操作系统提供的各种功能和服务。 Win32 API函数参考手册包含了大量的函数和相关的信息,包括函数的功能、使用方法、参数说明、返回值等等。它可以帮助开发者了解和掌握如何正确使用这些API函数来实现自己的功能需求。 这本手册对于开发Windows应用程序非常重要。无论是开发桌面应用程序、系统工具还是驱动程序,都需要使用到API函数。通过参考手册,我们可以根据自己的需求找到相应的函数,并了解如何正确地调用它们。 参考手册中的函数通常按照字母顺序排列,开发者可以通过函数名或者关键字进行查找。另外,这本手册还常常包含了一些示例代码,以帮助开发者更好地理解各个API函数的使用方法。 然而,由于Win32 API函数参考手册包含了大量的函数和信息,对于初学者来说可能会显得有些复杂和晦涩。因此,在阅读手册时,初学者可能需要结合其他的学习资源,如教程、文档或者网上的代码示例来更好地理解和使用这些API函数。 总体而言,Win32 API函数参考手册是一个非常有用的资源,它为开发者提供了一个完整的函数库,帮助他们快速了解和使用Windows操作系统的各种功能。 ### 回答2: Win32 API函数参考手册是一本非常重要的技术参考资料,它包含了大量的函数、结构体和常量等的详细说明和使用方法。它是开发Windows平台下应用程序的必备工具之一。 首先,Win32 API函数参考手册提供了各种函数的详细说明,包括函数的功能、参数、返回值以及调用方法等。通过手册,开发者可以轻松查找到所需函数,并且理解其具体用法和效果。这对于开发者来说非常重要,因为它们可以根据需要选择合适的函数来完成特定任务。 此外,Win32 API函数参考手册还提供了大量的结构体和常量的说明,这些结构体和常量在编写Windows应用程序时经常使用。它们定义了一些重要的数据结构常用的常量值,可以方便地在代码中引用,节省了开发者编写代码的时间和精力。 另外,Win32 API函数参考手册提供了一些例子来帮助开发者理解函数的使用方法。这些例子展示了如何调用函数以及如何处理函数的返回值,使得开发者可以通过自己实际运行例子来学习和弄清楚函数的使用细节。 总之,Win32 API函数参考手册是一本非常重要的技术参考资料,它帮助开发者理解函数的使用方法,提供了各种数据结构和常量的定义,并通过实例展示了函数的具体用法。开发者们可以依靠它在Windows平台上开发出高质量、高性能的应用程序。 ### 回答3: Win32 API函数参考手册是一本包含了Windows操作系统上使用的所有API函数的详细说明和用法的参考书籍。这本手册对于开发人员来说非常重要和有用。 Win32 API是一套面向Windows操作系统的应用程序编程接口,允许开发人员使用各种编程语言来编写程序并与操作系统进行交互。这些API函数提供了访问操作系统底层功能和资源的途径,包括文件操作、网络通信、图形界面、线程管理等方面。 Win32 API函数参考手册中的每个API函数都有详细的介绍和用法说明。对于开发人员来说,只需翻阅手册即可了解某个函数的功能、参数和返回值等信息。手册通常会提供示例代码以帮助开发人员理解如何正确地使用API函数。 通过查阅API函数参考手册,开发人员可以快速找到所需的函数,并了解如何调用它们来实现自己想要的功能。手册还提供了函数的版本信息和所需的操作系统平台要求,以帮助开发人员确保代码的兼容性。 API函数参考手册还可以帮助开发人员了解不同函数之间的相互作用和依赖关系。这对于复杂的应用程序开发非常重要,因为开发人员需要了解如何正确地组合和调用不同的函数以实现所需的功能。 总的来说,Win32 API函数参考手册是开发人员在Windows平台上进行应用程序开发的必备工具。它提供了完善的函数说明和用法示例,帮助开发人员快速准确地使用API函数,提高开发效率和程序质量。

              “相关推荐”对你有帮助么?

              • 非常没帮助
              • 没帮助
              • 一般
              • 有帮助
              • 非常有帮助
              提交
              评论
              添加红包

              请填写红包祝福语或标题

              红包个数最小为10个

              红包金额最低5元

              当前余额3.43前往充值 >
              需支付:10.00
              成就一亿技术人!
              领取后你会自动成为博主和红包主的粉丝 规则
              hope_wisdom
              发出的红包
              实付
              使用余额支付
              点击重新获取
              扫码支付
              钱包余额 0

              抵扣说明:

              1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
              2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

              余额充值