[问题] MSDN multi-thread问题

楼主: mingcloud (逆宇)   2017-07-18 23:44:46
开发平台(Platform): (Ex: Win10, Linux, ...)
VS2010
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VC++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
WINAPI
问题(Question):
小弟正在开发一个simulator
利用multithread模仿interrupt的行为
也就是原本的threadA执行到一半的时候
假设这时候硬件来了一个interrupt
就把原本的thread hold住
然后执行interrupt的对应动作
等执行完再让原本的THREADA继续往下跑
有看到网络上大部分人不太推荐使用WINAPI的suspendthread
比较建议在threadA找地方加入waitsingleobject
等object抓到后在枉下跑
但因种种原因 这个方法不被采纳
想要请教各位大大
这种windows模仿interrupt的行为
除了suspendthread还有别的方法吗?
或者是有办法解决suspendthread的block issue吗?
小弟原本有考虑过使用WINDOWS的signal
但是查了一下windows的signal好像没有像linux可以support到打给特定的thread
感觉起来他只能by process来送
这样应该只有MAIN THREAD会收到???(因为我的case里 mainthread !-= threadA)
喂入的资料(Input):
None
预期的正确结果(Expected Output):
no deadlock
错误结果(Wrong Output):
stuck at suspendthread
程式码(Code):(请善用置底文网页, 记得排版)
http://codepad.org/xAA3ME1T
补充说明(Supplement):
程式码的部分比较阳春
因为ISR 跟原本要做的事情很复杂
我就把他简单带过了
重点在于要怎么模仿出让特定thread卡住 然后直接执行另外一段程式码的部分
作者: hichcock (快乐一整年 ^^~~~)   2017-07-19 08:28:00
可以描述一下 "种种原因" 吗
作者: TeaEEE (爱不趴 不爱趴)   2017-07-19 08:36:00
让原本运行中的thread暂停不就失去multi的目的吗
楼主: mingcloud (逆宇)   2017-07-19 10:39:00
因为这是模仿single thread程式跑在特定hw的simulation…所以我们想要尽量跟原本的状况是相似的这也是为什么我们需要让原本thread暂停的原因
作者: hichcock (快乐一整年 ^^~~~)   2017-07-19 16:58:00
要模拟, 那你要先描述他本来的行为方式呀
作者: cgp218 (allen)   2017-07-19 22:39:00
用同步控制即可
楼主: mingcloud (逆宇)   2017-07-20 11:17:00
请问要怎么使用呢
作者: loveflames (咕啾咕啾魔法阵)   2017-07-20 12:25:00
pthread_cond_wait/pthread_cond_signal
作者: shibin (喜饼)   2017-07-24 19:58:00
Windows API, 可以用AutoResetEvent或ManualResetEvent

Links booklink

Contact Us: admin [ a t ] ucptt.com