windows 常用thread方法

1.HANDLE CreateThread( _In_opt_LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_SIZE_T dwStackSize, _In_LPTHREAD_START_ROUTINE lpStartAddress, _In_opt___drv_aliasesMemLPVOID lpParameter, _In_DWORD dwCreationFlags, _Out_opt_LPDWORD lpThreadId ); 参数说明 lpThreadAttributes:指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,NULL使用默认安全性,不可以被子线程继承,否则需要定义一个结构体将它的bInheritHandle成员初始化为TRUE dwStackSize,设置初始栈的大小,以字节为单位,如果为0,那么默认将使用与调用该函数的线程相同的栈空间大小。任何情况下,Windows根据需要动态延长堆栈的大小。 lpStartAddress,指向线程函数的指针. lpParameter:向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL。 dwCreationFlags :线程标志,可取值如下 (1)CREATE_SUSPENDED(0x00000004):创建一个挂起的线程, (2)0:表示创建后立即激活。

2.VOID ExitThread(DWORD dwExitCode);

正常结束一个线程的执行 参数说明: dwExitCode:指定调用线程的退出代

3.BOOL TerminateThread( HANDLE hThread,DWORD dwExitCode);

强制终止一个线程的执行 参数说明: hThread:被终止的线程的句柄 dwExitCode:线程退出时的退出码

4.DWORD ResumeThread(HANDLE hThread)

恢复一个线程 参数说明: hThread: 线程句柄 5.DWORD SuspendThread(HANDLE hThread);

挂起一个线程 参数说明: hThread:线程句柄

6

GetExiCodeThread()

得到一个已经终止线程的退出码

7.BOOL SetThreadPriority( __in HANDLE hThread, __in int nPriority ); hThread是线程的句柄。 nPriority是线程的优先级。

8.int GetThreadPriority( __in HANDLE hThread )

得到一个线程的优先级

9.BOOL CloseHandle(HANDLE hThread)

关闭一个线程的句柄

10.BOOL PostThreadMessage( DWORDidThread, UINTMsg, WPARAMwParam, LPARAMIParam ); 发送一条消息给指定的线程 参数说明: idThread:其消息将被寄送的线程的线程标识符。如果线程没有消息队列,此函数将失败。当线程第一次调用一个Win 32 USER或GDI函数时,系统创建线程的消息队列。要得到更多的信息,参见备注。 Msg:指定将被寄送的消息的类型。 wParam:指定附加的消息特定信息。 IParam:指定附加的消息特定信息。 注意:PostThreadMessage有时会失败,报1444错误(Invalid thread identifier. ) 其实这不一定是线程不存在的原因,也有可能是线程不存在消息队列(message queue)造成的。

11.int GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax); lpMsg:指向MSG结构的指针,该结构从线程的消息队列里接收消息信息。 hWnd:取得其消息的窗口的句柄。当其值取NULL时,GetMessage为任何属于调用线程的窗口检索消息,线程消息通过PostThreadMessage寄送给调用线程。 wMsgFilterMin:指定被检索的最小消息值的整数。 wMsgFilterMax:指定被检索的最大消息值的整数。 返回值:如果函数取得WM_QUIT之外的其他消息,返回非零值。如果函数取得WM_QUIT消息,返回值是零。如果出现了错误,返回值是-1。例如,当hWnd是无效的窗口句柄或lpMsg是无效的指针时。若想获得更多的错误信息,请调用GetLastError函数。 12.HANDLE GetCurrentThread()

得到当前的线程的伪句柄,表示只在调用的线程中使用有效。

13.DWORD GetCurrentThreadId() 获取当前线程一个唯一的线程标识符

14.DWORD GetThreadId(HANDLE hThread)

得到指定线程的ID

15.DWORD WaitForSingleObject(

HANDLE hHandle, DWORD dwMilliseconds )

等待单个对象

16.DWORD WaitForMultipleObject(DWORD dwCount , CONST HANDLE* phObject, BOOL fWaitAll, DWORD dwMillisecinds);

等待多个对象 参数说明: dwCount : 表示等待对象个数 phObject: 表示指向对象句柄的数组指针 fWaitAll: 是否等待所有的对象(ture) dwMillisecinds: 最长等待时间,INFINITE表示死等。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • VCL线程的同步方法 Synchronize(用消息来同步)

    RTL(Run-Time library),运行时库,包括System、SysUtils、Math三个单元,提供的函数与语言、编译器、操作系统及进程有关

    战神伽罗
  • 如何解决在DLL的入口函数中创建或结束线程时卡死

    通常情况下并不会使用到DLL的MAIN函数,因为delphi的框架已经把Main函数隐藏起来

    战神伽罗
  • Windows APC机制 & 可警告alertable的线程等待状态

    摘要:Windows APC的全称为(asynchronous procedure call)翻译为中文即“异步过程调用”。《Windows APC机制(一)》...

    战神伽罗
  • 多线程编程必备技术—— volatile,synchronized,lock

    volatile: volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。确保本条指令不会...

    Java深度编程
  • Java高并发之线程池详解

    例如线程, jdbc连接等等, 在高并发场景中, 如果可以复用之前销毁的对象, 那么系统效率将大大提升.

    用户1216491
  • Java并发指南1:并发基础与Java多线程

    本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看

    Java技术江湖
  • Java内存模型相关原则详解

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    用户1161110
  • Java基础-多线程(二)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • Java基础-多线程(三)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • Java基础-多线程(一)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java

扫码关注云+社区

领取腾讯云代金券