美文网首页
Windows线程

Windows线程

作者: szn好色仙人 | 来源:发表于2018-07-31 21:59 被阅读0次
线程组成
  • 线程内核对象:操作系统用他来管理线程,存放线程统计信息
  • 线程栈:用于维护线程执行时所需的所有函数参数和变量
线程退出方式
  • 线程退出最好的方式是通过线程函数返回
  • 线程通过ExitThread终止运行时,C/C++资源不会被销毁
  • 线程被TerminateThread杀死(此过程会以异步的方式进行),除非线程所属进程退出否则被杀死的线程的堆栈不会被释放。经测试,被杀死的线程的C++资源也不会被自动销毁(现象同被杀死的线程自己调用ExitThread一样)
  • 线程所属进程以ExitProcess或TerminateProcess方式被杀死,线程的清理工作也不能正常进行
#include <windows.h>
#include <cstdio>
#include <cassert>


class CTest
{
public:
    CTest() { printf("Create\n"); }
    ~CTest() { printf("Destroy\n"); }
};


DWORD WINAPI ThdFun(PVOID pValue)
{
    CTest Test;

    ExitThread(0);
    return 0;
}


int main()
{
    auto hThread = CreateThread(nullptr, 0, ThdFun, nullptr, 0, nullptr);
    assert(hThread);
    WaitForSingleObject(hThread, INFINITE);
    CloseHandle(hThread);
    
    system("pause");
    return 0;
}
/*
运行结果:输出"Create"而不会输出"Destroy"

备注:就算主进程退出也不会输出"Destroy"
*/
_beginthreadex
  • 标准C运行库设计的时间比线程出现的时间早了很多,所以标准C运行库设计的时候没有考虑线程安全性。为了保证C/C++多线程应用程序正常运行,创建线程的时候必须使用_beginthreadex而不是CreateThread
  • _beginthreadex产生的线程都有自己专用的_tiddata内存块,他们是从C/C++运行库的堆上分配的
  • _beginthreadex会在内部调用CreateThread
  • _beginthreadex失败返回0
  • 不要忘记使用CloseHandle来关闭_beginthreadex返回的句柄
  • _beginthreadex的参考文档:https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/beginthread-beginthreadex

相关文章

  • 程序员的自我修养 Liunx多线程

    Liunx的多线程   Windows 对进程和线程的实现如同教科书一般标准,Windows内核有明确的线程和进程...

  • Windows线程

    线程组成 线程内核对象:操作系统用他来管理线程,存放线程统计信息 线程栈:用于维护线程执行时所需的所有函数参数和变...

  • Win32多线程处理技术【线程的创建】

    线程的创建 线程内核对象 线程的终止 线程的优先级 Windows程序的执行单元 多线程 进程---主线程---辅...

  • Python 多线程编程

    多线程编程 进程(process)和线程(thread) Linux 和 windows 是多任务操作系统, 这就...

  • Windows 线程池

    Windows提供的线程池工作模式 以异步方式调用一个函数 每隔一段时间调用一个函数 当内核对象触发的时候调用一个...

  • Windows线程使用

    1.内核对象 操作系统创建的资源有很多种,如进程、线程、文件及信号量、互斥量等。其中大部分都是通过程序员的请求创建...

  • windows线程同步

    1. 线程同步之临界区 临界区不涉及到内核切换,只需要在用户态进行切换,所以效率比较高。基本使用流程:CRITIC...

  • Windows 线程同步

    用户对象:简单高效,功能受限。 内核对象:复杂,但是功能多,可指定超时,防止死锁。 1.临界区(用户对象):适用范...

  • delphi多线程

    Delphi通过线程类TThread 极大地简化了windows的多线程API函数操作。但是TThread 对...

  • php线程安全和非线程安全的区别

    windows下的php有两个版本,线程安全(Thread Safe)和非线程安全(Non Thread Safe...

网友评论

      本文标题:Windows线程

      本文链接:https://www.haomeiwen.com/subject/ydlkvftx.html