zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    使用 Spring data redis 结合 Spring cache 缓存数据配置
    Spring Web Flow 笔记
    Linux 定时实行一次任务命令
    css js 优化工具
    arch Failed to load module "intel"
    go 冒泡排序
    go (break goto continue)
    VirtualBox,Kernel driver not installed (rc=-1908)
    go运算符
    go iota
  • 原文地址:https://www.cnblogs.com/judes/p/5892394.html
Copyright © 2011-2022 走看看