96SEO 2026-02-19 11:37 15
2、在线程函数中调用WaitForSingleObject实现Sleep可立即退出Sleep状态

3、调用WaitForSingleObject函数监测线程或进程是否已经退出
3.1、子进程实时监测主进程是否已经退出主进程退出了则子进程要自动退出
C软件异常排查从入门到精通系列教程专栏文章列表欢迎订阅持续更新...https://blog.csdn.net/chenlycly/article/details/125529931C/C基础与进阶专栏文章持续更新中...https://blog.csdn.net/chenlycly/category_11931267.htmlVC常用功能开发汇总专栏文章列表欢迎订阅持续更新...https://blog.csdn.net/chenlycly/article/details/124272585C软件分析工具从入门到精通案例集锦专栏文章持续更新中...https://blog.csdn.net/chenlycly/article/details/131405795开源组件及数据库技术专栏文章持续更新中...https://blog.csdn.net/chenlycly/category_12458859.html网络编程与网络问题分享专栏文章持续更新中...https://blog.csdn.net/chenlycly/category_2276111.html
在做多线程同步时我们经常调用WaitForSingleObject接口去等待事件、互斥量和信号量等对象获取这些对象的所有权。
除了等待这些对象的作用外还可以去等待线程和进程今天就来结合日常的代码实践详细地总结一下WaitForSingleObject函数的用途。
如果对象的状态未对齐则调用线程将进入等待状态直到发出对象信号或超时间隔已过。
更改通知控制台输入可等待计时器内存资源通知事件Event互斥量Mutex信号量Semaphore线程Thread进程Process
为零则如果未向对象发出信号则函数不会进入等待状态;它始终立即返回。
关于WaitForSingleObject函数的说明可以查看微软MSDN上的说明
WaitForSingleObjecthttps://learn.microsoft.com/zh-cn/windows/win32/api/synchapi/nf-synchapi-waitforsingleobject
更改通知控制台输入可等待计时器内存资源通知事件Event互斥量Mutex信号量Semaphore线程进程
对于事件分有信号和无信号两个状态当事件对象编程有信号时WaitForSingleObject立即返回。
对于互斥量和信号量调用WaitForSingleObject获取所有权即WaitForSingleObject返回WAIT_OBJECT_0时获取他们的所有权然后调用ReleaseMutex和ReleaseSemaphore释放对象的所有权。
对于线程和进程线程和进程创建时无信号当线程和进程退出时对应的句柄就变成了有信号这样WaitForSingleObject就返回了。
可以通过WaitForSingleObject返回判断线程或进程是否已经退出了
专栏1该专栏订阅量接近350个有很强的实战参考价值广受好评专栏文章持续更新中预计更新到200篇以上
C软件调试与异常排查从入门到精通系列文章汇总https://blog.csdn.net/chenlycly/article/details/125529931
本专栏根据近几年C软件异常排查的项目实践系统地总结了引发C软件异常的常见原因以及排查C软件异常的常用思路与方法详细讲述了C软件的调试方法与手段以图文并茂的方式给出具体的实战问题分析实例带领大家逐步掌握C软件调试与异常排查的相关技术适合基础进阶和想做技术提升的相关C开发人员
专栏中的文章均是通过项目实战总结出来的通过项目实战积累了大量的异常排查素材和案例有很强的实战参考价值专栏文章还在持续更新中预计文章篇数能更新到200篇以上
C/C基础与进阶专栏文章持续更新中...https://blog.csdn.net/chenlycly/category_11931267.html
以多年的开发实战为基础总结并讲解一些的C/C基础与进阶内容以图文并茂的方式对相关知识点进行详细地展开与阐述专栏涉及了C/C领域的多个方面的内容同时给出C/C及网络方面的常见笔试面试题并详细讲述Visual
开源组件及数据库技术https://blog.csdn.net/chenlycly/category_12458859.html
2、在线程函数中调用WaitForSingleObject实现Sleep可立即退出Sleep状态
一般在线程的线程函数中设置一个循环在循环体中循环往复的执行相关的业务但不能让循环体中的代码中不停歇地执行否则线程会占用大量的CPU时间片会导致程序的高CPU占用问题。
当程序出现高CPU占用问题时基本都是程序中发生死循环了所在线程一直在不停歇地执行占用了大量的CPU时间片所以导致线程占用了较高的CPU比例。
所以我们一般都要在线程函数的循环体中人为地添加一个Sleep让线程时不时休息一下不要那么忙碌。
当线程进入Sleep状态时线程就被挂起了线程停止执行系统不再给线程分配CPU时间片当Sleep时间到了后系统再唤醒线程给线程分配CPU时间片线程得以继续执行。
实现线程Sleep有两种方式一种是直接调用C函数Sleep睡眠另一种借助事件对象去实现Sleep。
使用事件实现有个好处是能立即结束睡眠退出Sleep状态。
比如在终止线程执行时能让Sleep立即停止线程函数中的循环尽快结束线程函数尽快退出。
下面举一个使用事件对象实现Sleep的例子我们在项目中多次使用了。
先调用CreateEvent创建一个初始无信号手动的事件对象
在线程函数ThreadFunc中获取到传入的事件对象参数调用WaitForSingleObject函数实现Sleep通过WaitForSingleObject等待超时实现Sleep
在循环体中调用WaitForSingleObject实现Sleep的效果::WaitForSingleObject(hEvent,
调用WaitForSingleObject进入等待状态时会将线程挂起这个Sleep的效果是一样的
最后在需要立即退出Sleep时调用SetEvent函数将事件置为有信号WaitForSingleObject立即返回。
这样循环体就能尽快退出线程函数能尽快退出线程函数退出了线程就结束了。
调用SetEvent将事件对象置为有信号让WaitForSingleObject函数立即返回尽快退出循环
3、调用WaitForSingleObject函数监测线程或进程是否已经退出
在主程序运行的过程中启动了一个子进程有时主进程要等待子进程处理结果后根据返回的信息再控制后续代码的执行有时子进程需要感知主进程是否已经退出这两种情况都需要感知另一个进程是否已经退出。
对于线程在某些场合下页存在类似的需求。
3.1、子进程实时监测主进程是否已经退出主进程退出了则子进程要自动退出
主进程在运行过程中启动了一个子进程启动子进程时将主进程的进程id传给子进程。
子进程是依赖于主进程存活的如果主进程退出或者崩溃了则子进程就没有存在的意义了要自动退出所以子进程要实时监测主进程的状态监测主进程有没有退出包括崩溃闪退。
可能有人会说主进程可以在退出时通知子进程子进程收到通知后再自行退出。
但主进程可能会发生崩溃或闪退这种情况下一般时没法通知子进程的。
那子进程如何才能实时监测主进程是否退出了呢不管是主进程正常退出还是异常崩溃闪退都要感知到。
子进程可以启动一个子线程在子线程中通过主进程传过来的主进程id获取主进程句柄然后调用WaitForSingleObject等待主进程退出可以在子线程中无限等待。
如果主进程一旦退出WaitForSingleObject函数就会立即返回这时子进程就可以调用ExitProcess等接口自行退出当前子进程了。
具体的代码实现是子进程中启动一个子线程将主进程传过来的主进程id传给该子线程如下其中MonitorMainProcess是线程函数
设置INFINITE无限等待WaitForSingleObject(
WaitForSingleObject返回了就表示主进程已经退出直接退出本进程ExitProcess(
进程初始是无信号的进程退出时就变成了有信号这样WaitForSingleObject等待到信号后就返回了这样子进程就直到主进程退出了。
此处需要注意一下调用OpenProcess时必须要设置SYNCHRONIZE参数因为设置该标记参数后才能调用WaitForSingleObject去等待进程。
微软MSDN上对SYNCHRONIZE如下
此外监测主进程是否退出的代码是阻塞式的不能放在主线程中的这就是为什么要启动一个子线程去专门做这个监测任务的原因。
有时我们需要启动一个子进程去完成某项操作主进程在等待子进程的执行结果需要获取子进程的执行数据
然后主进程再去执行后续操作。
主进程在启动子进程后就可以调用WaitForSingleObject等待子进程退出比如如下的代码
有时启动一个子线程要等子线程执行完退出后根据处理结果信息去继续执行和上面等待进程退出是类似的。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback