可能我描述不是很准确。
我遇到这样的一个问题:
 BOOL b =::AnimateWindow(m_arhwndPage[ m_nCurrPage ],
         300,
flag
);
动画显示一个视窗出现,在这个过程中,设定时间为300ms。但是,我在程序中开了一个其它线程。在视窗动画显示的过程中,线程获得不到CPU使用权。
也就是,在视窗动画显示的过程中,线程没有办法运行,只有等视窗动画显示结束后,才能占用CPU运行。类似的问题还出现在:视窗从小变大,视窗尺寸变化的动态刷新通常也需要一些时间(100ms以上)。在这个过程中,线程好像也是没有办法占用CPU。有没有办法可以解决。我的线程定义为:
在App定义了全局函数(用于线程)
UINT Sample_Thread(LPVOID pParam) 
{
  do{
    Access_Device(..);
  }while(g_flag==0);  Close_Device(..);
  AfxEndThread(0);
  return 1;
}调用线程:
CWinThread* m_pMsglogThread = (CWinThread*) AfxBeginThread(Sample_Thread,GetSafeHwnd(),
             THREAD_PRIORITY_HIGHEST,0,0,NULL); //开启线程
线程内部是循环执行的,除非标志位为1,线程才结束;
在这个过程中,可能别的线程会占用时间(例如窗口的刷新)。
Access_Device(..)操作我是做成驱动的,级别别是Ring0的不要紧。
循环中还有别的...操作,循环体循环调用Access_Device(...)要求两次调用Access_Device(..)的时间间隔不能超过100ms。所以我将级别定为THREAD_PRIORITY_HIGHEST。
但是,我发现当出现上面所说道视窗动态刷新时,线程中两次Access_Device的间隔时间不能保证小于100ms。
设置的THREAD_PRIORITY_HIGHEST最高级别没起到效果么??没有视窗动态刷新的级别高?
改成THREAD_PRIORITY_TIME_CRITICAL也是不行。
有人遇过类似的问题么?那位高手可以指点一下。谢谢!