windows多线程编程
来源:互联网 发布:普通话在线测试软件 编辑:程序博客网 时间:2024/05/16 04:03
一、 线程的概念
进程是操作系统分配资源的单位,而线程是操作系统调度的单位,进程是静态的,而线程是活动的。与进程一样,线程由两部分构成。
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);
进程是操作系统分配资源的单位,而线程是操作系统调度的单位,进程是静态的,而线程是活动的。与进程一样,线程由两部分构成。
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多线程编程
- Windows多线程编程总结
- windows多线程编程经验总结
- Windows多线程编程注意事项
- windows多线程编程经验总结
- Windows平台多线程编程
- Windows多线程编程总结
- Windows多线程编程
- windows多线程编程[转]
- Windows多线程编程总结
- WINDOWS多线程编程
- windows多线程编程
- Windows多线程编程总结
- Windows多线程编程
- windows多线程编程
- Windows 下多线程编程
- java heap space解决方法和JVM参数设置
- windows多进程编程
- Chapter04 字典:当索引不好用时
- 字典和列表的区别
- NYOJ 42 一笔画问题 http://acm.nyist.net/JudgeOnline/problem.php?pid=42
- windows多线程编程
- 配置我自己的vs环境
- exception处理
- Win API通用对话框之GetOpenFileName
- y510p 安装ubuntu问题解决记录
- BitBlt参数含义
- Android开发环境及调试问题汇集
- 字符数组与整型数组的初始化和赋值对比
- VirtualBox增大空间方法