2 SwitchToThread()
还有别的办法么?
现在我做的是在RTSS环境下做的,SwitchToThread()不能用,而且据说Sleep()不准,很不稳定
21 个解决方案
#1
SwitchToThread是给纤程用的吧,参考<windows核心编程〉
Sleep(0)就是放弃时间片,放弃后怎么调度依赖于操作系统当时的情况。
Sleep(0)就是放弃时间片,放弃后怎么调度依赖于操作系统当时的情况。
#2
是啊,我在主线程里建立了两个线程,每个线程函数里都有Sleep(0),希望在两个线程间不断切换,但有时Sleep(0)后,根据输出的调试结果看并没有切换到另一个线程,不知道怎么回事
#3
操作系统调度的问题,
具体调度情况依据操作系统进行调度。
sleep(0)只是放弃线程的时间片
具体调度情况依据操作系统进行调度。
sleep(0)只是放弃线程的时间片
#4
sigh,ok.还是要多看书
#5
多任务系统时间是很难准的,想准几乎不可能。而且,你是没有办法代替OS去调度线程的,Sleep也不可能强制切换到你自己的另外一个线程
#6
又要用多线程,又要切换?真看不懂是什么意思。既然不是并行,那为什么要用多线程?纤程(Fiber)不行么?
#7
另外如果确实就只是为了在线程之间进行切换,那就使用多媒体定时器吧。
#8
为什么需要主动相互切换??
你需要他们之间交互的话 线程间通信的方式也很多了。
你需要他们之间交互的话 线程间通信的方式也很多了。
#9
用两个信号量就可以了
A : B:
while(1){ while(1){
Lock BB Lock AA
Free AA Free BB
} }
A : B:
while(1){ while(1){
Lock BB Lock AA
Free AA Free BB
} }
#10
为了测试实时系统的线程转换时间。我只能想到这个办法了,呵呵。
#11
安装了RTX系统,利用VC里的RTX APPLICATION WIZARD建立的框架。Fiber我不懂啊
#12
你可以用九楼的方法试一下,用Criticalsection,让两个线程走走停停,不知道能不能解决你的问题
#13
都是很好的建议! 值得学习
#14
接分先!
#15
线程:
1.时间片:时钟中断处理例程从PCR中取得当前线程对象指针并更新线程时间,如果超出了时间片,则将当前线程从放入ready列表中,然后从standby列表中取出最高优先级的线程,然后保存当前线程上下文数据,并转到新的线程上下文.
2.主动等待:线程调用等待函数,则将当前线程放到wait列表中,然后从standby列表中取一个线程,切换上下文,当主动等待的事件完成时,线程被调度到ready列表中等待再次被调度运行.
3.抢先:时钟中断发现standby列表中有比当前线程更高的线程,则挂起当前线程,切换线程上下文,运行最需要运行的线程.
所以,线程间切换就是"线程挂起自己,让出CPU"
1.时间片:时钟中断处理例程从PCR中取得当前线程对象指针并更新线程时间,如果超出了时间片,则将当前线程从放入ready列表中,然后从standby列表中取出最高优先级的线程,然后保存当前线程上下文数据,并转到新的线程上下文.
2.主动等待:线程调用等待函数,则将当前线程放到wait列表中,然后从standby列表中取一个线程,切换上下文,当主动等待的事件完成时,线程被调度到ready列表中等待再次被调度运行.
3.抢先:时钟中断发现standby列表中有比当前线程更高的线程,则挂起当前线程,切换线程上下文,运行最需要运行的线程.
所以,线程间切换就是"线程挂起自己,让出CPU"
#16
操作系统的事,Win32位下应该没有主动切换一说,除非用Sleep或是WaitForSingleObject阻塞自己
#17
mark
#18
mark
#19
要控制先后顺序,必须要用信号量呀
#20
告诉你一个好办法 别跟别人说 用EDF算法 就可以 我感觉很不错的
#21
mark
学习了
学习了
#1
SwitchToThread是给纤程用的吧,参考<windows核心编程〉
Sleep(0)就是放弃时间片,放弃后怎么调度依赖于操作系统当时的情况。
Sleep(0)就是放弃时间片,放弃后怎么调度依赖于操作系统当时的情况。
#2
是啊,我在主线程里建立了两个线程,每个线程函数里都有Sleep(0),希望在两个线程间不断切换,但有时Sleep(0)后,根据输出的调试结果看并没有切换到另一个线程,不知道怎么回事
#3
操作系统调度的问题,
具体调度情况依据操作系统进行调度。
sleep(0)只是放弃线程的时间片
具体调度情况依据操作系统进行调度。
sleep(0)只是放弃线程的时间片
#4
sigh,ok.还是要多看书
#5
多任务系统时间是很难准的,想准几乎不可能。而且,你是没有办法代替OS去调度线程的,Sleep也不可能强制切换到你自己的另外一个线程
#6
又要用多线程,又要切换?真看不懂是什么意思。既然不是并行,那为什么要用多线程?纤程(Fiber)不行么?
#7
另外如果确实就只是为了在线程之间进行切换,那就使用多媒体定时器吧。
#8
为什么需要主动相互切换??
你需要他们之间交互的话 线程间通信的方式也很多了。
你需要他们之间交互的话 线程间通信的方式也很多了。
#9
用两个信号量就可以了
A : B:
while(1){ while(1){
Lock BB Lock AA
Free AA Free BB
} }
A : B:
while(1){ while(1){
Lock BB Lock AA
Free AA Free BB
} }
#10
为了测试实时系统的线程转换时间。我只能想到这个办法了,呵呵。
#11
安装了RTX系统,利用VC里的RTX APPLICATION WIZARD建立的框架。Fiber我不懂啊
#12
你可以用九楼的方法试一下,用Criticalsection,让两个线程走走停停,不知道能不能解决你的问题
#13
都是很好的建议! 值得学习
#14
接分先!
#15
线程:
1.时间片:时钟中断处理例程从PCR中取得当前线程对象指针并更新线程时间,如果超出了时间片,则将当前线程从放入ready列表中,然后从standby列表中取出最高优先级的线程,然后保存当前线程上下文数据,并转到新的线程上下文.
2.主动等待:线程调用等待函数,则将当前线程放到wait列表中,然后从standby列表中取一个线程,切换上下文,当主动等待的事件完成时,线程被调度到ready列表中等待再次被调度运行.
3.抢先:时钟中断发现standby列表中有比当前线程更高的线程,则挂起当前线程,切换线程上下文,运行最需要运行的线程.
所以,线程间切换就是"线程挂起自己,让出CPU"
1.时间片:时钟中断处理例程从PCR中取得当前线程对象指针并更新线程时间,如果超出了时间片,则将当前线程从放入ready列表中,然后从standby列表中取出最高优先级的线程,然后保存当前线程上下文数据,并转到新的线程上下文.
2.主动等待:线程调用等待函数,则将当前线程放到wait列表中,然后从standby列表中取一个线程,切换上下文,当主动等待的事件完成时,线程被调度到ready列表中等待再次被调度运行.
3.抢先:时钟中断发现standby列表中有比当前线程更高的线程,则挂起当前线程,切换线程上下文,运行最需要运行的线程.
所以,线程间切换就是"线程挂起自己,让出CPU"
#16
操作系统的事,Win32位下应该没有主动切换一说,除非用Sleep或是WaitForSingleObject阻塞自己
#17
mark
#18
mark
#19
要控制先后顺序,必须要用信号量呀
#20
告诉你一个好办法 别跟别人说 用EDF算法 就可以 我感觉很不错的
#21
mark
学习了
学习了