ResumeThread在这种特殊情况下不起作用

时间:2011-12-02 10:18:00

标签: c windows multithreading

平台:Windows 64位

语言:c

我有一个创建2个线程的主程序

  1. 后台主题
  2. 线程1
  3. Thread1正在执行function1(在一个循环中打印100次,每次打印之间睡眠时间为10分钟)。第一次打印后,它会睡10分钟。

    现在,后台线程将挂起Thread1并更改其上下文以执行function2(GetThreadContext,更改Rip,SetThreadContext)并恢复Thread1。

    Function2的逻辑是打印1到100之间的数字。

    理想情况下,我希望Thread1在从后台线程恢复后立即运行function2 ...因为Rip指向function2而不是Sleep。

    但是在10分钟的睡眠过去之后,thread1才会运行...如果我在这里遗漏了任何东西,请告诉我。

    我被困在这里很多天......

1 个答案:

答案 0 :(得分:4)

据我所知,Suspend / ResumeThread不保证正在运行的任何内核函数都会被中断。我建议您使用SleepEx让您的睡眠进入可警告的等待状态,并使用QueueUserAPC告诉它调用您选择的函数,而不是使用线程上下文。