sigh
没人理???!!
我顶!!!

解决方案 »

  1.   


    极度同情你~~~为什么跟我一样,发的贴从就没人理?!!!!!!!!!!kao`~~
      

  2.   

    因为CALLBACK是设备的回调函数
    设备在等这个函数返回
    如果在这里面发布停止工作的命令
    当时设备是能停
    在主程序会因此而无法正常关闭设备而导致死机
      

  3.   

    因为CALLBACK是设备的回调函数
    设备在等这个函数返回
    如果在这里面发布停止工作的命令
    当时设备是能停
    在主程序会因此而无法正常关闭设备而导致死机
      

  4.   

    使用GoTo语句,将程序指针指向回调处。
      

  5.   

    这个回调函数是由设备自行调用的
    用来初始化和得到数据
    而我所要做的就是在这个函数中把数据指针传给设备
    没用回调处也不能使用GOTO语句
      

  6.   

    CALLBACK和主程序是一个进程
    但要在CALLBACK外(比如说主程序)关闭设备
    所以不由CALLBACK直接调用关闭设备的函数
    我试过发送消息但好象一点用也没有
    消息没有发到消息队列中
    无论是send还是post
      

  7.   

    那有没有用Application.ProcessMessages 这条语句试试呢,西,我想你肯定也会告诉我试过了:)
      

  8.   

    不是的
    这个设备回调函数不是一个线程
    他经常调用执行的非常快(实时性)
    CPU占用近于100%
    无法控制优先级
    我曾经设置过一个进程
    优先级设为最高
    但在这个回调函数面前
    也没有用
    得不到机会执行
    到于主线程拆分的问题
    我想程序的主FORM是不能放在线程里的
    它必须是一个进程
    所以也没用PROCESSMESSAGE我的确早就试了没用
      

  9.   

    不是的
    这个设备回调函数不是一个线程
    他经常调用执行的非常快(实时性)
    CPU占用近于100%
    无法控制优先级
    我曾经设置过一个进程
    优先级设为最高
    但在这个回调函数面前
    也没有用
    得不到机会执行
    到于主线程拆分的问题
    我想程序的主FORM是不能放在线程里的
    它必须是一个进程
    所以也没用PROCESSMESSAGE我的确早就试了没用
      

  10.   

    不是的
    这个设备回调函数不是一个线程
    他经常调用执行的非常快(实时性)
    CPU占用近于100%
    无法控制优先级
    我曾经设置过一个进程
    优先级设为最高
    但在这个回调函数面前
    也没有用
    得不到机会执行
    到于主线程拆分的问题
    我想程序的主FORM是不能放在线程里的
    它必须是一个进程
    所以也没用PROCESSMESSAGE我的确早就试了没用
      

  11.   

    不是的
    这个设备回调函数不是一个线程
    他经常调用执行的非常快(实时性)
    CPU占用近于100%
    无法控制优先级
    我曾经设置过一个进程
    优先级设为最高
    但在这个回调函数面前
    也没有用
    得不到机会执行
    到于主线程拆分的问题
    我想程序的主FORM是不能放在线程里的
    它必须是一个进程
    所以也没用
    PROCESSMESSAGE我的确早就试了没用                
                    
      

  12.   

    不是的
    这个设备回调函数不是一个线程
    他经常调用执行的非常快(实时性)
    CPU占用近于100%
    无法控制优先级
    我曾经设置过一个进程
    优先级设为最高
    但在这个回调函数面前
    也没有用
    得不到机会执行
    到于主线程拆分的问题
    我想程序的主FORM是不能放在线程里的
    它必须是一个进程
    所以也没用
    PROCESSMESSAGE我的确早就试了没用
      

  13.   

    不是的
    这个设备回调函数不是一个线程
    他经常调用执行的非常快(实时性)
    CPU占用近于100%
    无法控制优先级
    我曾经设置过一个进程
    优先级设为最高
    但在这个回调函数面前
    也没有用
    得不到机会执行
    到于主线程拆分的问题
    我想程序的主FORM是不能放在线程里的
    它必须是一个进程
    所以也没用
    PROCESSMESSAGE我的确早就试了没用
      

  14.   

    不可能的阿!
    你肯定有地方弄歪了
    你那个设备是啥类型的东西啊?
    应该这样说:只要你想,就可以100%抢占并卡死系统!
    所以你要避免的话,也许就在那个回调里面,你要做
    些自动降低权限的动作,类似里面加一点delay,这样
    它歇了以后,系统自会把消息打到泵里去,你就可以关了阿
    (一般,写驱动的家伙都会悄悄加一些睡觉的代码)
      

  15.   

    关注一下,但我看,它CPU就不太高,好象也不好停下,我看是软件的原因,
    你在WIN2000下试试,
    在WIN2000下,CPU能占用99的并不多,
      

  16.   

    好像那个算法的惯性很大啊,能否改进一下。设置标志位不可以吗?呵呵,用Timer也可以的,或者用timeGetTime也可以,能精确到1ms!sendmessage不可以吗?用互斥体也可以嘛!
      

  17.   

    楼上的兄弟
    这个算法是设备自己想的
    我没法改 :P
    标志位我想过
    但是因为它本身运行快
    标志位外界没法读
    timer我没有试过下次试试看吧
    也许能行希望挺大
    sendmessage试过没用
    互什么体我也试过
    因为这个不是线程也没用
      

  18.   

    timer的优先级很低!(比单布中断高一点)异常中断的级别很高,兄弟可以考虑抛出异常出来,比如除法错误中断的级别比硬件中断高。具体操作呢,老兄自己斟酌,我只是建议。
      

  19.   

    也许:问题可能就在那个callback里面罢
    一般写驱动的伙计都会悄悄加些睡觉的代码,
    你那个设备也许做的形式就有问题,
    确实是有100%霸占系统无法响应的情况
    你也许要根据情况设个标志位,让callbak在某种情况下睡一会儿
    这样系统可以取回控制
      

  20.   

    to:smhpnuaa(农奴翻身感谢党)
    谢谢你的提示
    抛出异常我也没有试过
    但是在CALLBACK里抛异常我觉得有危险
    我怕这样它不再继续运行(继续调用CALLBACK取数据)
    不过现在能试一下
    一个是TIMER 一个是RAISE
    to : mashimaro3600(爱吃白菜) 
    标志位我设过
    但没用让他睡是睡不了
    但停掉或暂停可以(必须从外面发命令)
      

  21.   

    我觉得坏就坏在你的设备是实时的
    那个callback咋睡不了呢,是不是代码在XXms的时间里执行不完,设备就要崩掉吗
    我的意思是 ,如果他没这样的毛病
          void callback_func1()
          {
            static i = 0;
               
               。。
               。。
               i++;
               if (i>1000)
                 {
                    i =0;
                    want_to_sleep(20); //20ms
                   }  
            
           }
    -----------------------
      我见过那些老牛总是有意无意加类似的东西 
    -----------------------