C6、线程
来源:互联网 发布:园林 知乎 编辑:程序博客网 时间:2024/06/07 23:10
一、介绍:(与进程一样,由两部分组成:线程内核对象,地址空间(堆栈)),但线程的开销比线程小很多;能简化用户界面;充分利用CPU。
二、线程函数:
a) 线程进入点函数:
DWORD WINAPI ThreadFunc(PVOID, pvParam){
DWORD dwResult = 0 ;
…
return (dwResult);
}
b) 主线程进入点函数:main, wmain, WinMain, wWinMain
c) 必须有返回值
三、创建线程的函数:
HANDLE CreateThread(
PSECURITY_ATTRIBUTES psa, //NULL,默认安全属性
DWORD cbStack, //设定地址空间大小,可以使用链接程序的/STACK开关控制
PTHREAD_START_ROUTINE pfnStartAddr, //线程函数的地址
PVOID pvParam, //可用于传值,但是,如果是局部变量传入,可能导致访问违例,使用线程同步技术来处理!
DWORD fdwCreate,//=NULL,立即调度;=CREATE_SUSPENDED,暂停执行
PDWORD pdwThreadID);//可传递NULL,但win98不行!
四、建议使用CRT函数创建线程:_beginthreadex , _endthreadex. (TLS线程本地存储),但不建议使用_beginthread和_endthread。
unsigned long _beginthreadex(
void *security,
unsigned stack_size,
unsigned (*start_address)(void *),
void *arglist,
unsigned initflag,
unsigned *thrdaddr);
五、终止线程运行,方法:
a) 线程函数返回(最好)
b) ExitThread(最好不用,C++资源未释放,但内存堆栈被撤销)
c) TerminateThread(应避免使用,内存堆栈不被撤销)
d) 包含线程的进程终止。
六、查询线程
a) 是否已经终止:
BOOL GetExitCodeThread(HANDLE hThread, //线程句柄
PDWORD pdwExitCode);//如线程结束,则指向返回值,否则=STILL_ACTIVE
b) 获取进程/线程的伪句柄(当前调用函数的句柄),CloseHandle将失效:
HANDLE GetCurrentProcess();
HANDLE GetCurrentThread();
c) 获取ID:
DWORD GetCurrentProcessId(); DWORD GetCurrentThreadId();
d) 将伪句柄变成实句柄DuplicateHandle:
HANDLE hThreadParent;
BOOL DuplicateHandle(
GetCurrentProcess(),
GetCurrentThread(),
GetCurrentProcess(),
&hThreadParent,
0, FALSE, DUPLICATE_SAME_ACCESS);
- C6、线程
- c6
- C6
- C6-函数
- c6手机短信识别字段
- C6程序优化
- C6优化数据库IndexDefrag
- V C6.0++ 创建窗口
- C++沉思录句柄C6
- C6系统绩效考核模板建立原则
- sql命令给C6用户发寻呼!
- C6中session传递判断简单例子
- C6流程功能按钮参考解读
- C6用款中自动统计本月已付款
- NOKIA C6-00 MP3歌曲文件乱码
- linux disable CPU c4/c6 state
- 信息拥有一辆雪铁龙C6
- 【备忘】【C6】《Java 实时编程》PDF 下载
- C3、内核对象
- SCVMM部署
- C4、进程
- Spket的配置与使用
- C5、作业
- C6、线程
- C7、线程的调度、优先级、亲缘性
- C8、 用户方式的线程同步
- C9、线程与内核对象的同步
- 引用和指针的比较
- 【转】Subversion快速入门教程
- struts2 ognl中字符串比较的一个注意点
- 使用mysql dump 导入与导出的方法
- 要离开就请永远别再回来