我在DLL中设置一个定时器往一个变量写入数据,在主程序中读取这个变量的值,结果读变量的循环体使DLL中定时器的消息响应函数得不到执行的机会,代码如下,请高手指点,万分感谢!
(1)//DLL 程序
Int value;//变量
void  StartTimer()//启动定时器
{
Int  interval=10;
SetTimer(NULL,1,interval,TimerProc);
}
void  TimerProc()//定时器消息处理
{
value++;
}
Int  GetValue()//获取变量值
{
Return value;
}
(2)//主程序
StartTimer();//启动DLL中的定时器
While(1)
{
GetValue();//无休止的调用DLL中的GetValue()函数后,
            //DLL中的TimerProc()永远得不到执行,
            //获得的值永远不变,怎么解决?
sleep(1);
}

解决方案 »

  1.   

    楼主,你把主进程都给阻塞了。系统就不会处理其他消息了。解决方法:
    1.要么你GetValue()也放到SetTimer里面做
    2.要么你开个线程。
      

  2.   

    谢谢tiger9991,能否详细些,如果开个线程,具体应该如何布置才能实现我想要的功能:即读和写互不影响、能并行执行?谢谢!
      

  3.   

    还有一个要点:写数据要在严格的精确的时间间隔内进行,所以如果用线程而不用定时器,可能达不到这个要求,因为定时器的时间间隔控制很精确,而如果用线程的sleep()来代替定时器计时,那就不能保证精度了。
      

  4.   

    While(1)
    {
    GetValue();//无休止的调用DLL中的GetValue()函数后,
      //DLL中的TimerProc()永远得不到执行,
      //获得的值永远不变,怎么解决?
    sleep(1);
    }
    ===========
    你自己都说了这里TierProc没有办法执行,那就不能这样写啊
    你可以将GetValue的调用放在TimerProc中去,这样就不用写while循环了。
    或者写成这样:
    While(1)
    {
    GetValue();//无休止的调用DLL中的GetValue()函数后,
    GetMessage(....);  
    }
      

  5.   

    看来是我表达不清楚,实际问题是这样的:
    (1)主程序是用户定死的,他就是要这样写:
    //主程序
    StartTimer();//启动我写的DLL中的定时器
    While(1)
    {
    GetValue();//调用我写的DLL中的函数 获取 DLL中的变量值
    sleep(1);
    }
    (2)用户要我写一个DLL让他上面的主程序调用,他要我提供这样的功能:
    循环不停地 在精确的时间间隔内 计算变量的值;
    用户的主程序随时可以读取这个变量的值。也就是说我能写、能修改的就是这个DLL的程序,而用户的主程序是不让我修改的。
    而我的这个DLL该如何写才能实现用户的要求?
      

  6.   

    我的问题也跟楼主的差不多,要做个循环播放的东西,directShow循环播放需要监听消息,我只能做个定时器来检测DX的回复信息!!!打算用在dll里面做多线程了!不知道还有没有更好的方法呢!!!求解啊!!!
      

  7.   

    参考我的博客 
    高精度多媒体时钟应用类 http://blog.csdn.net/zgl7903/archive/2008/06/25/2584675.aspx