平台:Windows 64位
语言:c
我有一个创建2个线程的主程序
Thread1正在执行function1(在一个循环中打印100次,每次打印之间睡眠时间为10分钟)。第一次打印后,它会睡10分钟。
现在,后台线程将挂起Thread1并更改其上下文以执行function2(GetThreadContext,更改Rip,SetThreadContext)并恢复Thread1。
Function2的逻辑是打印1到100之间的数字。
理想情况下,我希望Thread1在从后台线程恢复后立即运行function2 ...因为Rip指向function2而不是Sleep。
但是在10分钟的睡眠过去之后,thread1才会运行...如果我在这里遗漏了任何东西,请告诉我。
我被困在这里很多天......
答案 0 :(得分:4)
据我所知,Suspend / ResumeThread不保证正在运行的任何内核函数都会被中断。我建议您使用SleepEx让您的睡眠进入可警告的等待状态,并使用QueueUserAPC告诉它调用您选择的函数,而不是使用线程上下文。