多线程执行CPU过高问题

在多线程项目开发中遇到CPU占用过高的情况,这通常由线程死循环引起。通过在所有线程处理函数入口设置断点进行调试,可以定位并解决问题。线程数并不是决定CPU占用的关键因素,即使是少量的死循环线程也可能导致高CPU占用。此外,程序在使用内核对象时,CPU占用的判断应考虑内核调用的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目开发过程中使用到多线程技术,有时程序运行起来占用CPU很高(具体占用多少,跟你的CPU核数有关。若是单核,可能直接100%),应该以release版本的运行的情况为准(因为若是多个子线程间的阻塞没处理好,可能调试过程中查看的CPU占用并不高)。这种问题,一般都是在多线程的处理中,有死循环了。

解决办法:

找到所有的线程处理函数并在入口打上断点,耐心的一步步调试,只要坚信问题的存在,最后总是会找出问题的。

 

CPU占用高不高,跟你的线程数多少没有太多的影响。因为若你CPU是双核,即使只创建了2个子线程,而这两个子线程是2个死循环,此时你的CPU占用也会是相当的高的。

不信的可以直接试试。

CPU占用高不高也不能只看本程序运行起来的CPU占用率,因为若是你的程序使用了内核对象的调用,那么在任务管理器中你会看到你的程序占用CPU是不高的,但使用到内核对象在内核调用中的那些服务程序就会显示CPU占用高。

int _tmain(int argc, _TCHAR* argv[])
{
	InitializeCriticalSection(&m_gCriticalSection);
	//一个线程最多可以挂起 MAXIMUM_SUSPEND_COUNT次,即127次
	//线程1
	unsigned threadID;
	hThread1 = (HANDLE)_beginthreadex(NULL, 0, ThreadProc1, NULL, 0, &threadID);
	
	//线程2
	unsigned threadID2;
	hT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值