C++等待和睡眠问题

C++ Wait and sleep problems

本文关键字:问题 等待 C++      更新时间:2023-10-16

好吧,我正在处理一个菜单,它的工作原理是每3秒就会出现一个新选项,但我正在努力使它在这3秒内可以按下按钮激活一些东西,现在看这里:

dvar(-1, 0, "e "Prestige and rank settings"");
Sleep(35);
dvar(-1, 0, "c "Set prestige one"");
if (Key_Down(0, 0x02)) {
  dvar(-1, 0, "c "Setting 1st prestige, will be kicked"");
  Sleep(1000);
  dvar(-1, 0, "c "^43"");
  Sleep(1000);
  dvar(-1, 0, "c "2"");
  Sleep(1000);
  dvar(-1, 0, "c "^41"");
  Sleep(1000);
}
Sleep(3000);

上面的问题是在"设置声望一"之后,它会跳到下一个睡眠(3000)和下一个选项,现在我需要找到一种方法,如果语句女巫在那3秒内是一个按钮,那么它会睡眠线程并使按钮不可用,除非你在加载文本之前按下它。

所以我需要做的基本上是睡眠线程,而不是让它等待3秒钟,这样我仍然可以使用if语句。

这是一个运行在XBOX360 上的DLL

当前正在使用的Lib

#include "stdafx.h"
#include < stdio.h >
#include <string>
#include <iostream>

我认为您应该尝试用以下思想进行编程::

  1. 事件驱动
  2. 多线程。使用系统计时器事件服务
  3. 基于状态机

伪代码是这样的::

int State = IDLE;
dvar(-1, 0, "e "Prestige and rank settings"");
Sleep(35);
dvar(-1, 0, "c "Set prestige one"");
while (1)
{
    switch (SomeEvent)
    {
    case ON_Key_down:
        if (Key == 0x02)
        {
            if (State == IDLE || State == KEY_PRESSED_SET1stPRESTIGE_Finish)
            {
                State = KEY_PRESSED_SET1stPRESTIGE_1stSTEP;
                dvar(-1, 0, "c "Setting 1st prestige, will be kicked"");
                Timer_Event_AfterMS(1000);   // make request event after 1sec to system alarm service
            }
            else
            {
                // ignore do something
            }
        }
        break;
    case ON_Timer_SomeSec:
        if (State == KEY_PRESSED_SET1stPRESTIGE_1stSTEP)
        {
            dvar(-1, 0, "c "^43"");
            State = KEY_PRESSED_SET1stPRESTIGE_2ndSTEP;
            Timer_Event_AfterMS(1000);   // make request event after 1sec to system alarm service
        }
        else if (State == KEY_PRESSED_SET1stPRESTIGE_2ndSTEP)
        {
            dvar(-1, 0, "c "2"");
            State = KEY_PRESSED_SET1stPRESTIGE_3rdSTEP;
            Timer_Event_AfterMS(1000);   // make request event after 1sec to system alarm service       
        }
        else if (State == KEY_PRESSED_SET1stPRESTIGE_3rdSTEP)
        {
            dvar(-1, 0, "c "^41"");
            State = KEY_PRESSED_SET1stPRESTIGE_4rdSTEP;
            Timer_Event_AfterMS(1000);   // make request event after 1sec to system alarm service       
        }
        else if (State == KEY_PRESSED_SET1stPRESTIGE_4rdSTEP)
        {
            State = KEY_PRESSED_SET1stPRESTIGE_Need3SEC;
            Timer_Event_AfterMS(3000);   // make request event after 3sec to system alarm service       
        }
        else if (State == KEY_PRESSED_SET1stPRESTIGE_Need3SEC)
        {
            State == KEY_PRESSED_SET1stPRESTIGE_Finish;
        }
        break;
    default:
        break;
    }
}