VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 134|回复: 0

VC++高级班之多线程篇-[4]线程的相关操作

[复制链接]
51_avatar_middle
online_admins Syc 发表于 2018-3-28 10:11:45 | 显示全部楼层 |阅读模式
①、线程的挂起与恢复:SuspendThread、ResumeThread
在线程创建并运行后,用户可以对线程执行挂起和恢复操作,
挂起就是指暂停线程的执行,当然有暂停就有恢复,之后,用户可以通过指定的操作来恢复线程的正常执行!

※※※ 注意:线程的挂起与恢复是有次数的,即:可以多次挂起,但是之后想进行线程的正常执行必须进行多次恢复操作!
具体见演示!
===================================================
②、线程的优先级:

线程的相对优先级有以下取值:
THREAD_PRIORITY_TIME_CRITICAL:Time-critical,关键时间(最高)
THREAD_PRIORITY_HIGHEST:Highest,最高(其实是“次高”)
THREAD_PRIORITY_ABOVE_NORMAL:Above normal,高于标准
THREAD_PRIORITY_NORMAL:Normal,标准
THREAD_PRIORITY_BELOW_NORMAL:Below normal,低于标准
THREAD_PRIORITY_LOWEST:Lowest,最低(其实是“次低”)
THREAD_PRIORITY_IDLE:Idle,空闲(最低)

AfxBeginThread 创建的线程可以直接在创建的时候指定,而 CreateThread 需要创建之后指定!
获取:GetThreadPriority
设置:SetThreadPriority

  1. UINT __cdecl ThreadProc1(LPVOID lpParameter)
  2. {
  3.         CStdioFile mFile;
  4.         mFile.Open(_T("C:\\123.txt"), CFile::modeCreate | CFile::modeReadWrite);
  5.         int tipMsg = (int)lpParameter;
  6.         CString strTipMsg;
  7.         while(TRUE) {
  8.                 strTipMsg.Format(_T("%d\r"), tipMsg);
  9.                 mFile.WriteString(strTipMsg);
  10.         }

  11.         mFile.Close();

  12.         return 0;
  13. }
复制代码

  1. UINT __cdecl ThreadProc2(LPVOID lpParameter)
  2. {
  3.         CStdioFile mFile;
  4.         mFile.Open(_T("C:\\456.txt"), CFile::modeCreate | CFile::modeReadWrite);
  5.         int tipMsg = (int)lpParameter;
  6.         CString strTipMsg;
  7.         while(TRUE) {
  8.                 strTipMsg.Format(_T("%d\r"), tipMsg);
  9.                 mFile.WriteString(strTipMsg);
  10.         }

  11.         mFile.Close();

  12.         return 0;
  13. }
复制代码

  1. void CThreadTestDlg::OnBnClickedBtn()
  2. {
  3.         CWinThread *pThread = AfxBeginThread(ThreadProc1, (LPVOID)111, THREAD_PRIORITY_LOWEST);
  4.         //SetThreadPriority(pThread->m_hThread, THREAD_PRIORITY_LOWEST);

  5.         pThread = AfxBeginThread(ThreadProc2, (LPVOID)789, THREAD_PRIORITY_HIGHEST);
  6.         //SetThreadPriority(pThread->m_hThread, THREAD_PRIORITY_HIGHEST);
  7. }
复制代码

===================================================
③、线程的退出与终结:
1、最好的方式:让线程函数主动退出,或者 return;
可以保证线程函数里面对象的析构函数被调用,以及线程申请的相关空间被释放;

2、线程自己主动退出,可以调用 ExitThread(MFC中使用 AfxEndThread);
线程函数里面对象的析构函数不会被调用,线程申请的相关空间被释放;
所以,在C语言里面可以使用该函数退出线程,但在C++里面不建议,因为C++里面有类!

3、其他程序强行结束目标线程:可以调用 TerminateThread
此函数非常危险,被结束的线程不会得到任何通知,线程申请的相关空间也不会被释放!
所以,离他远点!

4、线程退出码的获取:GetExitCodeThread
前提:句柄有效,不被关闭!
===================================================
※※※ 小作业:重点掌握线程的退出与终结!课后多加实践!
------------------------------------- End -------------------------------------------

相关课程演示细节还请观看视频教程!
本套教程由VC驿站原创,提供视频教程+售后答疑服务!
VC驿站Vip会员售后答疑截图【持续更新】:http://www.cctry.com/thread-288054-1-1.html
教程介绍及详情请见:http://www.cctry.com/static/vip/index.html
VC驿站Vip会员详情请见:http://www.cctry.com/static/vip/index.html





上一篇:VC++高级班之多线程篇-[3]MFC中用户界面线程的相关操作
下一篇:VC++高级班之多线程篇-[5]线程间通信

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-8-20 14:51

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表