C++ 跨平台环境中 sigpause 的现代用法?

C++ Modern usage for sigpause in cross-platform environment?

提问人:Alejandro Mujica 提问时间:6/15/2023 更新时间:6/15/2023 访问量:30

问:

我正在做一些逆向工程atm,我正在处理的应用程序使用旧的POSIX线程系统,在这种情况下,它使用以下代码(为Linux制作):

while ( GameRunning() )
  {
    sigblock(512);
    for ( i = SigUsr1Counter; !SigUsr1Counter && !SigAlarmCounter; i = SigUsr1Counter )
      __sigpause(0, 0);
    if ( i > 0 )
    {
      SigUsr1Counter = 0;
      ReceiveData();
    }
    v2 = SigAlarmCounter;
    if ( SigAlarmCounter > 0 )
    {
      SigAlarmCounter = 0;
      AdvanceGame(Beat * v2);
    }
  }

诸如 __sigpause 和 sigblock 之类的函数调用,我想这是等待信号系统时的某种暂停,但是,我不知道如何使其适应现代C++并使其在 Windows 下也能正常工作。

我读过关于conditional_variable的文章,但我不相信它会完成这项工作?欢迎任何见解!对不起,如果以前有人问过这个问题,有点学习!

我尝试了这些,signalCount 在不同的线程上增加,但不确定这是否是正确的方法。

int signalCount = 0;
while (signalCount == 0) {
   sleep(50);
}
C++ 变量 发出 POSIX

评论

0赞 Ruh Roh Raggy 6/15/2023
为什么你认为条件变量不能完成这项工作?它们实际上能够使线程进入睡眠状态并唤醒/通知正在睡眠的线程。似乎适用于这里。
0赞 Fantastic Mr Fox 6/15/2023
你能更详细地描述一下更广泛的问题吗?这些信号是在线程之间还是在进程之间使用?
0赞 Alejandro Mujica 6/15/2023
它们在线程之间使用。我真的不知道如何为这种确切的行为使用条件。

答: 暂无答案