请问,主线程和自己开的线程之间切换的机制是什么。。是根据时间片轮流切换么?大概的机理可以介绍一下么?比如说,我自己开了一个线程,用于对外设采样数据的读取,那么它什么时候会切换到主线程,从主线程又切换回来后。其中大概有多少时间的间隔?因为我的线程是实时采样,故两次读数据的间隔不太太久。(我的主线程中没有什么操作。)
  刚学线程,很多概念不清楚,望高手指点一下,谢谢!!

解决方案 »

  1.   

    如果,在自己开的线程中有一句Sleep(200),停留200ms
    或者,在自己开的线程中调用驱动IO_Control(...),级别Ring0,需要的时间大概为200ms,
    那么线程该如何切换呢?根据什么原则呢?
      

  2.   

    我在自己开的线程中调用驱动DeviceIoControl(...),级别为Ring0,需要的时间大概为200ms,我知道,好像一般的应用程序运行级别都在Ring3,
    可以帮我分析一下它和主线程是如何切换的呢?
    ---------------
    按我的理解,是不是这样的:
    由于自己开的线程中主要是执行DeviceIoControl(...),为驱动级别Ring0,运行优先级别很高,故在执行DeviceIoControl(...)的时候无法切换回主线程。
    主线程(20ms)-->自己的线程(200ms) --> 主线程(20ms)-->自己的线程(200ms)哪位高手可以指点一下,谢谢!!
      

  3.   

    自己开的线程调deviceiocontrol的时候,仍然是在ring3,不会到ring0去。是who告诉你的?
      

  4.   

    我调用deviceiocontrol(),然后返回回来,就需要耗费200ms,在这期间。。
    你的意思是。。
    在调用deviceiocontrol(),然后返回出来的200ms的执行时间里,系统还是可以进行进程的切换么??
      

  5.   

    不清楚你的时间是怎么算出来的。
    调了deviceiocontrol,成功了就会有在ring0的线程run了,时间应该是被它占了。
      

  6.   

    for(i=0;i<=100,i++) {
       deviceiocontrol(Device_ID,64000,temp,......);
    }
    其中,Device_ID是打开的设备名称,temp是一个64K字节数组的指针,执行一次deviceiocontrol(Device_ID,64000,temp,......);意味着从设备上读取64K个字节,成功了返回TRUE,失败了返回FALSE;
    我循环执行了100次,用了20秒,所以,我算出每个deviceiocontrol()的时间是200ms是不是,我哪里理解不对,概念不清,请指点,谢谢!!
      

  7.   

    按我的理解,是不是这样的:
    主线程(20ms)-->自己的线程(200ms) --> 主线程(20ms)-->自己的线程(200ms)
    ----------------------------------------
    之前,我执行100次deviceiocontrol(),耗时20秒,没有开线程,直接在主线程中,相应按钮事件,计时为20秒。