windows多线程编程

转载 2013年12月06日 02:02:36
一、 线程的概念
进程是操作系统分配资源的单位,而线程是操作系统调度的单位,进程是静态的,而线程是活动的。与进程一样,线程由两部分构成。
1、线程的内核对象(TCB),一个数据结构,操作系统通过它对线程实施管理,同时也是系统用来存放线程统计信息的地方。
2、线程堆栈,用于维护线程爱执行代码时需要的所有函数的参数和局部变量。
二、 与线程相关的API
1、 创建线程
HANDLE CreateThread(
PSECURITY_ATTRIBUTES psa, //安全属性
DWORD cbStack, //堆栈大小
PTHREAD_START_POUTINF pfnSatrtAddr, //函数地址
PVOID pvParam, //函数参数
DWORD fdwCreate, //创建标志
PDWORD pdwThreadID); //新线程的线程ID
2、 终止线程
(1)、从线程函数返回
(2)、线程自己终止自己
VOID ExitThread(
UINT fuExitCode); //退出代码
(3)、终止自身进程或其他进程
BOOL TerminateThread(
HANDLE hThread, //进程句柄
UINT fuExitCode); //退出代码
3、 获取线程句柄
HANDLE GetCurrentThread();
4、 查询自己的线程时间
FILETIME GetThreadTimes(
HANDLE hThread, //线程句柄
FILETIME lpCreationTime, //装载线程的创建时间
FILETIME lpExitTime, //装载线程的中止时间
FILETIME lpKernelTime, //装载线程花在内核模式上的总时间
FILETIME lpUserTime); //装载线程花在用户模式上的总时间
5、 获取线程自身ID
BOOL GetCurrentThreadId();
6、 暂停线程的运行
DWORD SuspendThread(
HANDLE hThread);
7、 唤醒线程
DWORD ResumeThread(
HANDLE hThread);
8、 使进程睡眠
VOID Sleep(
DWORD dwMilliseconds); //睡眠时间
9、 获取结构环境
BOOL GetThreadContext(
HANDLE hThread,
PCONTEXT pContext);
10、获取线程优先级
Int GetThreadPriority(
HANDLE hThread);
11、修改刚创建的线程的优先级
BOOL SetThreadPriority(
HANDLE hThread, //线程句柄
Int nPriority); //相对线程优先级
注:相对线程优先级
关键时间: THREAD_PRIORITY_TIME_CRITICAL
最高: THREAD_PRIORITY_HIGHEST
高于正常; THREAD_PRIORITY_ABOVE_NORMAL
正常: THREAD_PRIORITY_NORMAL
低于正常: THREAD_PRIORITY_BELOW_NORMAL
最低: THREAD_PRIORIRY_LOWEST
空闲: THREAD_PRIORITY_IDLE
注:使用方法,必须以挂起方式创建线程,修改完毕后唤醒线程
DWORD dwThreadID;
HANDLE hThread = CreateThread(NULL, 0, ThreadFunc, NULL,
CREATE_SUSPENDED,
&dwThreadID);
SetThreadPriority(hThread, THREAD_PRIORITY_HIGHEST);
ResumeThread(hThread);
CloseHandle(hThread);
注:在线程创建函数中没有提供线程优先级的设置,当线程刚刚创建时,其相对线
程优先级总是设置为正常优先级。
三、 C/C++中创建线程
在C/C++中若要创建一个新线程,建议调用C/C++运行期库函数,而不是操作系统的CreateThread函数。
Unsigned long _beginthreadex(
Void *security,
Unsigned stack_size,
Unsigned (*start_address)(void *),
Void *arglist,
Unsigned initflag,
Unsigned *thrdaddr);

Windows平台下多线程编程基本步骤

首先说明一下句柄的概念:一种指向指针的指针。由于Windows是一个以虚拟内存为基础的操作系统,在系统环境下,windows内存管理器在内存中来回移动对象,对象被移动也就是对象的地址变化了。Windo...
  • liminwang0311
  • liminwang0311
  • 2012年12月03日 20:15
  • 1637

Windows平台下多线程编程基础(C++)

程序、进程、线程 当计算机出现多核处理器后,每个“核”便可以同时执行不同的行程,这时,我们需要让操作系统和应用程序也实现并行化执行。这样的话,“程序”的概念,已经无法描述其内存中的执行情况,它是静态的...
  • liminwang0311
  • liminwang0311
  • 2012年12月03日 17:02
  • 3617

基于windows的多线程编程初步介绍

基于windows的多线程编程 基于windows下的多线程编程,首先我们需要了解创建线程的函数CreateThread,CreateThread将在主线程的基础上创建一个新线程。 函数原型: ...
  • u011484045
  • u011484045
  • 2015年10月29日 09:56
  • 367

Windows 多线程编程总结

Windows 多线程编程总结 关键字:多线程 线程同步 线程池 内核对象 1 内核对象 1 .1 内核对象的概念 内核对象是内核分配的一个内存块,这种内存块是一个数据结构,表示内核对象的各种特征。并...
  • yhf19881015
  • yhf19881015
  • 2013年07月29日 15:10
  • 1317

Windows多线程编程

 一、 线程的概念       进程是操作系统分配资源的单位,而线程是操作系统调度的单位,进程是静态的,而线程是活动的。与进程一样,线程由两部分构成。       1、线程的内核对象(TCB),一个数...
  • bxhj3014
  • bxhj3014
  • 2008年02月04日 12:15
  • 2506

libevent多线程编程实例

Makefile eventtest : eventtest.c gcc -Wall -g -levent -lpthread -o eventtest eventtest.c .PHONY : c...
  • chinabhlt
  • chinabhlt
  • 2015年02月13日 12:04
  • 941

再聊多线程04--信号量

今天整理“信号量”的相关知识,其实想想也蛮有趣的,锁,互斥,信号量都可以实现线程同步,在framework里面主要有三种。 :ManualResetEvent :AutoResetEvent : Se...
  • xiangxizhishi
  • xiangxizhishi
  • 2018年01月30日 11:39
  • 29

windows C++多线程编程高级篇 实现线程同步

上一篇文章windows编程 使用C++实现多线程类仅仅是介绍了怎样用类来实现多线程,这篇文章则重点介绍多线程中数据同步的问题。好了,废话不多说,进入主题。     问题场景:这里我们假设有...
  • chenzba
  • chenzba
  • 2015年05月14日 15:34
  • 1113

一文学会 Python 多线程编程

一文学会 Python 多线程编程  Threading 模块从 Python 1.5.2 版开始出现,用于增强底层的多线程模块 thread 。Threading 模块让操作多线程变得更简单...
  • Jinlong_Xu
  • Jinlong_Xu
  • 2017年03月28日 21:08
  • 402

Windows C++多线程与Linux C++多线程编程

Windows C++:  所需头文件#include #include 开启一个线程:                hReader = (HANDLE)_beginthreadex(NULL, 0...
  • oyzdz1988
  • oyzdz1988
  • 2010年04月19日 19:47
  • 3702
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:windows多线程编程
举报原因:
原因补充:

(最多只允许输入30个字)