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

Nav*_*een 0 c windows multithreading

平台:windows 64位

语言 : c

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

  1. 后台线程
  2. 线程1

Thread1 正在执行 function1(在循环中打印名称 100 次,每次打印之间的睡眠时间为 10 分钟)。第一次打印后,休眠10分钟。

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

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

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

但是直到 10 分钟的睡眠时间过后,线程 1 才会运行......如果我在这里遗漏了什么,请告诉我。

我被困在这里好几天了......

bdo*_*lan 5

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

  • 在随机点中断线程并强制它执行堆栈转储代码也不是真正的线程安全。例如,没有什么可以阻止函数不将帧指针保存在寄存器中。我建议使用 google 的 breakpad 库或其他东西来编写小型转储,而不是自己动手,它们已经为您解决了所有难题。 (2认同)