WIN32线程的基础知识 总结

2008.10.08
《Windows核心编程》第6章—线程的基础知识 学习总结

 

    在WIN32中,进程是线程的容器,每个进程至少拥有一个主线程。进程包括两部分:进程内核对象和地址空间。
同样,线程也包括两部分:线程的内核对象和线程堆栈。
    线程的主要使用在辅助计算方面,使长时间的计算不影响用户界面。
    线程必须有个进入点函数,如WIN32应用程序的主线程的进入点函数就是main()或WinMain()等.

    一般WIN32辅助线程的进入点函数为如下形式:
DWORD WINAPI ThreadFunc(PVOID pvParam)
{
  DWORD dwResult = 0;
  ...
  return(dwResult);
}

    函数CreateThread()参数简介:
HANDLE CreateThread(
   PSECURITY_ATTRIBUTES psa,  // 指定安全的结构指针,一般可以NULL,bInheritHandle成员指定句柄是否可以继承
   DWORD cbStack,  // 指定线程堆栈空间的大小
   PTHREAD_START_ROUTINE pfnStartAddr, // 指定线程入口点函数地址
   PVOID pvParam,   // 传递给线程函数的参数
   DWORD fdwCreate,   // 一般为0,立即执行线程函数
   PDWORD pdwThreadID);   // 指定线程ID,一般就0

    线程的终止的方法有:线程函数的返回,调用ExitThread(),调用TerminateThread()。但是,终止线程运行的最佳方法是让它的线程函数返回。这样才尽可能保证某些资源能正常释放。

    WIN32线程的性质。线程的内核对象中包含了:一组CPU寄存器,包括SP线程堆栈寄存器,IP指令指针寄存器等;其他属性,如使用计数,暂停计数,返回码等。
    其中指令寄存器IP存放的是BaseThreadStart()函数地址,这样在CreateThread调用后,线程函数的执行是在BaseThreadStart()函数中调用的。

    C/C++运行期库的考虑。由于部分C运行期函数并没有考虑线程安全性,所以在多线程应用程序中使用C/C++运行库函数时,要考虑尽量使用_beginthreadex()创建线程,当然项目属性要设置链接到多线程DLL版本的C/C + +运行期库。

    线程的伪句柄。GetCurrentProcess()和GetCurrentThread()返回的都是伪句柄,伪句柄在这里暂时理解为无法在其他线程中使用成功,意思是如果在A线程中用上面函数得到了句柄,再传递给B线程中进行前的线程的操作(如改A的优先级等)是不成功的,操作前需要使用函数DuplicateHandle()将伪句柄转化实句柄,此函数同样适用于进程句柄。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值