zoukankan      html  css  js  c++  java
  • windows api线程

    windows api线程

     
    一、
    1、定义入口函数
    static void  threadFunc(void);//在TestDlg.h里面声明

     void CTestDlg::threadFunc(void)     //在TestDlg.cpp里定义

      {
      Sleep(1000);
      AfxMessageBox(_T("OK!"));
      }

    2、定义线程句柄:
     HANDLE hthread; //线程句柄
    3、获取线程句柄:
    函数原型:
    static HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpsa,//访问级别 DWORD dwStackSize,      //栈大小 LPTHREAD_START_ROUTINE pfnThreadProc,//线程函数 void* pvParam,        //函数传递参数 DWORD dwCreationFlags,  //启动方式 DWORD* pdwThreadId     //返回ID ) throw( );

      hthread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)threadFunc,NULL,0,NULL);//获得句柄

     4、关闭句柄
      CloseHandle(hthread);//并不会关闭线程

     二、一些函数

      1、DWORD SuspendThread(HANDLE hThread); 该函数用于挂起指定的线程,如果函数执行成功,则线程的执行被终止。

      2、 DWORD ResumeThread(HANDLE hThread); 该函数用于结束线程的挂起状态,执行线程。

      3、VOID ExitThread(DWORD dwExitCode); 该函数用于线程终结自身的执行,主要在线程的执行函数中被调用。其中参数dwExitCode用来设置线程的退出码。             4、 BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode); 一般情况下,线程运行结束之后,线程函数正常返回,但是应用程序可以调用TerminateThread强行终止某一线程的执行。各参数含义如下:hThread:将被终结的线程的句柄;dwExitCode:用于指定线程的退出码。     

      使用 TerminateThread()终止某个线程的执行是不安全的,可能会引起系统不稳定;虽然该函数立即终止线程的执行,但并不释放线程所占用的资源。因此,一般不建议使用该函数。      

    5、BOOL PostThreadMessage(DWORD idThread,UINT Msg,  WPARAM wParam,  LPARAM lParam);  

    该函数将一条消息放入到指定线程的消息队列中,并且不等到消息被该线程处理时便返回。  
      
    idThread:将接收消息的线程的ID;   
      
    Msg:指定用来发送的消息;   
      
    wParam:同消息有关的字参数;   
      
    lParam:同消息有关的长参数;   
      
    调用该函数时,如果即将接收消息的线程没有创建消息循环,则该函数执行失败。

     二、多线程同步
      1、CreateMutex(互斥对象)
      2、WaitFirSingleObject
      3、ReleaseMutex
  • 相关阅读:
    又快又准的sql瓶颈诊断方法
    Qps从300到1500的优化过程
    Mysql性能优化全揭秘-庖丁解牛
    java学习笔记16-抽象类
    java学习笔记15-封装
    java学习笔记14-多态
    java学习笔记13-重写与重载
    Git学习笔记08-远程仓库
    Python3+Appium学习笔记09-元素定位android_uiautomator
    Python3+Appium学习笔记08-元素定位
  • 原文地址:https://www.cnblogs.com/nanfengnan/p/13795918.html
Copyright © 2011-2022 走看看