在一个线程中的循环Sleep(0),几乎内存占用99%?解决思路

在一个线程中的循环Sleep(0),几乎内存占用99%?
m_pProtThread =AfxBeginThread(CBoardPort::LoopProtThread,this); //开启线程

UINT CBoardPort::LoopProtThread(LPVOID lParam) //线程循环检测硬件
{
  CBoardPort* pthis = (CBoardPort*)lParam;  
  while(1)
  {  
  pthis->SetDAOutState();
  pthis->GetIOInState();
  pthis->SetIoOutState();
  pthis->GetADState();
  Sleep(0);  
  }  

  return 0;
}

如果Sleep(0),几乎内存占用99%? ,,改为Sleep(1)内存占用为0,,,但因为是操作底层硬件接口的,
Sleep(1);是延迟毫秒的,,意味浪费了1毫秒,, 能改再少点吗??

------解决方案--------------------
不要吝惜1毫秒,骚年
------解决方案--------------------
为什么要循环检测硬件?
可以用Deviceiocontrol,OnDeviceChange通过驱动检监控到硬件的改动,然后通知上层应用。
你这种方式太落伍了,小学生才这么做。
------解决方案--------------------
for(int i=0; i<len) i++;

变化len,直到测试满足你的要求.
------解决方案--------------------
Sleep(0):暂停当前线程并允许调度程序运行其他具有相同或更高的优先级别的线程。---出自MFC Windows程序设计。
LZ说占用内存多。貌似矛盾了
谁给解释下~~
------解决方案--------------------
我都是用sleep(10)的
1ms其实windows操作系统根本精确不到
检查底层硬件接口有延迟不也很正常么
------解决方案--------------------
Sleep(0)不相当于什么都没干嘛。while(1)死循环自然耗尽cpu资源(如果单核)。Sleep(1)则会引起系统的又一次调度过程。当前线程会被挂起,cpu自然被降下来了。
------解决方案--------------------
sleep(0)在单核机器可能还有用,多核没用
------解决方案--------------------
探讨

我都是用sleep(10)的
1ms其实windows操作系统根本精确不到
检查底层硬件接口有延迟不也很正常么

------解决方案--------------------
SwitchToThread
------解决方案--------------------
如果你的硬件有中断,用中断
------解决方案--------------------
用WaitForSingleObject等待EVENT事件对象不是很好嘛?