C++等待和睡眠问题
C++ Wait and sleep problems
好吧,我正在处理一个菜单,它的工作原理是每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>
我认为您应该尝试用以下思想进行编程::
- 事件驱动
- 多线程。使用系统计时器事件服务
- 基于状态机
伪代码是这样的::
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;
}
}
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 在 c++ 中等待一个子进程与另一个子进程时遇到问题
- 解决死锁问题,在主线程中等待多个工作线程完成 (C++11)
- C++等待和睡眠问题
- c++等待问题
- MPI 中的非阻塞通信和 MPI 等待问题.并非所有信息都正确传递
- 如何解决多个运行线程的繁忙等待问题
- 性能问题与c++(使用vc++ 2010):在运行时,我的程序似乎随机等待一段时间