刚学线程,很多概念不清楚,望高手指点一下,谢谢!!
14 个解决方案
#1
同一优先级的线程默认大概是以20ms的时间片切换吧。。
我想关键要看优先级。。。
我想关键要看优先级。。。
#2
如果,在自己开的线程中有一句Sleep(200),停留200ms
或者,在自己开的线程中调用驱动IO_Control(...),级别Ring0,需要的时间大概为200ms,
那么线程该如何切换呢?根据什么原则呢?
或者,在自己开的线程中调用驱动IO_Control(...),级别Ring0,需要的时间大概为200ms,
那么线程该如何切换呢?根据什么原则呢?
#3
先看优先级。要是同一优先级的话,就是时间片轮流了。
#4
主要由操作系统的线程调度机制决定。
#5
人为的能控制吗
#6
我在自己开的线程中调用驱动DeviceIoControl(...),级别为Ring0,需要的时间大概为200ms,我知道,好像一般的应用程序运行级别都在Ring3,
可以帮我分析一下它和主线程是如何切换的呢?
---------------
按我的理解,是不是这样的:
由于自己开的线程中主要是执行DeviceIoControl(...),为驱动级别Ring0,运行优先级别很高,故在执行DeviceIoControl(...)的时候无法切换回主线程。
主线程(20ms)-->自己的线程(200ms) --> 主线程(20ms)-->自己的线程(200ms)
哪位高手可以指点一下,谢谢!!
可以帮我分析一下它和主线程是如何切换的呢?
---------------
按我的理解,是不是这样的:
由于自己开的线程中主要是执行DeviceIoControl(...),为驱动级别Ring0,运行优先级别很高,故在执行DeviceIoControl(...)的时候无法切换回主线程。
主线程(20ms)-->自己的线程(200ms) --> 主线程(20ms)-->自己的线程(200ms)
哪位高手可以指点一下,谢谢!!
#7
谢谢关注!
#8
自己开的线程调deviceiocontrol的时候,仍然是在ring3,不会到ring0去。是who告诉你的?
#9
我调用deviceiocontrol(),然后返回回来,就需要耗费200ms,在这期间。。
你的意思是。。
在调用deviceiocontrol(),然后返回出来的200ms的执行时间里,系统还是可以进行进程的切换么??
你的意思是。。
在调用deviceiocontrol(),然后返回出来的200ms的执行时间里,系统还是可以进行进程的切换么??
#10
不清楚你的时间是怎么算出来的。
调了deviceiocontrol,成功了就会有在ring0的线程run了,时间应该是被它占了。
调了deviceiocontrol,成功了就会有在ring0的线程run了,时间应该是被它占了。
#11
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
是不是,我哪里理解不对,概念不清,请指点,谢谢!!
deviceiocontrol(Device_ID,64000,temp,......);
}
其中,Device_ID是打开的设备名称,temp是一个64K字节数组的指针,执行一次deviceiocontrol(Device_ID,64000,temp,......);意味着从设备上读取64K个字节,成功了返回TRUE,失败了返回FALSE;
我循环执行了100次,用了20秒,所以,我算出每个deviceiocontrol()的时间是200ms
是不是,我哪里理解不对,概念不清,请指点,谢谢!!
#12
按我的理解,是不是这样的:
主线程(20ms)-->自己的线程(200ms) --> 主线程(20ms)-->自己的线程(200ms)。。。
----------------------------------------
之前,我执行100次deviceiocontrol(),耗时20秒,没有开线程,直接在主线程中,相应按钮事件,计时为20秒。
主线程(20ms)-->自己的线程(200ms) --> 主线程(20ms)-->自己的线程(200ms)。。。
----------------------------------------
之前,我执行100次deviceiocontrol(),耗时20秒,没有开线程,直接在主线程中,相应按钮事件,计时为20秒。
#13
up
#14
谢谢关注!
#1
同一优先级的线程默认大概是以20ms的时间片切换吧。。
我想关键要看优先级。。。
我想关键要看优先级。。。
#2
如果,在自己开的线程中有一句Sleep(200),停留200ms
或者,在自己开的线程中调用驱动IO_Control(...),级别Ring0,需要的时间大概为200ms,
那么线程该如何切换呢?根据什么原则呢?
或者,在自己开的线程中调用驱动IO_Control(...),级别Ring0,需要的时间大概为200ms,
那么线程该如何切换呢?根据什么原则呢?
#3
先看优先级。要是同一优先级的话,就是时间片轮流了。
#4
主要由操作系统的线程调度机制决定。
#5
人为的能控制吗
#6
我在自己开的线程中调用驱动DeviceIoControl(...),级别为Ring0,需要的时间大概为200ms,我知道,好像一般的应用程序运行级别都在Ring3,
可以帮我分析一下它和主线程是如何切换的呢?
---------------
按我的理解,是不是这样的:
由于自己开的线程中主要是执行DeviceIoControl(...),为驱动级别Ring0,运行优先级别很高,故在执行DeviceIoControl(...)的时候无法切换回主线程。
主线程(20ms)-->自己的线程(200ms) --> 主线程(20ms)-->自己的线程(200ms)
哪位高手可以指点一下,谢谢!!
可以帮我分析一下它和主线程是如何切换的呢?
---------------
按我的理解,是不是这样的:
由于自己开的线程中主要是执行DeviceIoControl(...),为驱动级别Ring0,运行优先级别很高,故在执行DeviceIoControl(...)的时候无法切换回主线程。
主线程(20ms)-->自己的线程(200ms) --> 主线程(20ms)-->自己的线程(200ms)
哪位高手可以指点一下,谢谢!!
#7
谢谢关注!
#8
自己开的线程调deviceiocontrol的时候,仍然是在ring3,不会到ring0去。是who告诉你的?
#9
我调用deviceiocontrol(),然后返回回来,就需要耗费200ms,在这期间。。
你的意思是。。
在调用deviceiocontrol(),然后返回出来的200ms的执行时间里,系统还是可以进行进程的切换么??
你的意思是。。
在调用deviceiocontrol(),然后返回出来的200ms的执行时间里,系统还是可以进行进程的切换么??
#10
不清楚你的时间是怎么算出来的。
调了deviceiocontrol,成功了就会有在ring0的线程run了,时间应该是被它占了。
调了deviceiocontrol,成功了就会有在ring0的线程run了,时间应该是被它占了。
#11
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
是不是,我哪里理解不对,概念不清,请指点,谢谢!!
deviceiocontrol(Device_ID,64000,temp,......);
}
其中,Device_ID是打开的设备名称,temp是一个64K字节数组的指针,执行一次deviceiocontrol(Device_ID,64000,temp,......);意味着从设备上读取64K个字节,成功了返回TRUE,失败了返回FALSE;
我循环执行了100次,用了20秒,所以,我算出每个deviceiocontrol()的时间是200ms
是不是,我哪里理解不对,概念不清,请指点,谢谢!!
#12
按我的理解,是不是这样的:
主线程(20ms)-->自己的线程(200ms) --> 主线程(20ms)-->自己的线程(200ms)。。。
----------------------------------------
之前,我执行100次deviceiocontrol(),耗时20秒,没有开线程,直接在主线程中,相应按钮事件,计时为20秒。
主线程(20ms)-->自己的线程(200ms) --> 主线程(20ms)-->自己的线程(200ms)。。。
----------------------------------------
之前,我执行100次deviceiocontrol(),耗时20秒,没有开线程,直接在主线程中,相应按钮事件,计时为20秒。
#13
up
#14
谢谢关注!