线程间通信.如何将信号发送到另一个线程

Eta*_*tan 6 c++ windows multithreading signals

在我的应用程序中,我有两个线程

  1. 大多数时候都很忙的"主线"
  2. 一个"附加线程",它发出一些HTTP请求,并阻塞直到它得到响应.

但是,HTTP响应只能由主线程处理,因为它依赖于它的线程本地存储和非线程安全功能.

我正在寻找一种方法来告诉主线程何时收到HTTP响应和相应的数据.主线程应该被附加线程中断并尽快处理HTTP响应,然后继续从之前中断的点开始工作.

  • 我可以考虑的另一种方法是使用附加线程挂起主线程SuspendThread,使用内联汇编器从主线程复制TLS,然后执行响应处理函数并在之后恢复主线程.

  • 我想到的另一种方法是,在第二个线程回调例程中的某个特定地址上设置一个断点,这样当第二个线程指令指针在该断点上步进时,主线程就会收到通知 - 因此 - 已收到HTTP响应.

然而,这两种方法看起来都不是很好,即使只考虑它们也会受到伤害,而且它们看起来并不可靠.

我可以用什么来打断我的主线程,说它应该礼貌并在做其他事情之前处理HTTP响应?我们赞赏没有依赖库的答案,但如果它提供了一些很好的解决方案,我也会采取一些依赖.

以下问题(关于QueueUserAPC解决方案)得到了解答,并解释说在我的案例中没有安全的方法来推动行为.

Bri*_*ine 4

这可能是一个人只顾自己一个非常具体的想法而不重新考虑大局的时候。没有单一的机制可以让单个线程在当前上下文中停止执行,去做其他事情,并在它脱离的确切行处恢复执行。如果可能的话,那么它首先就违背了拥有线程的目的。正如您已经提到的,在不退后一步并重新考虑整体架构的情况下,最优雅的选择似乎是使用另一个线程来等待 HTTP 响应,让它在安全位置挂起主线程,自行处理响应,然后恢复主线程。在这种情况下,您可能会重新考虑线程本地存储是否仍然有意义,或者范围更高一点的存储是否更合适,因为每次中断主线程时,您可能会浪费大量周期来复制它。