This commit is contained in:
Lenheart 2022-04-14 13:12:00 +08:00
parent 191fcd3da9
commit 89f85d0ea7
2 changed files with 36 additions and 11 deletions

View File

@ -16,6 +16,8 @@ struct TimeSTLStruct
std::string Name; std::string Name;
int Max_Time; int Max_Time;
int Now_Time; int Now_Time;
long long Static_Time;
HANDLE Thand;
}; };
//构造Time类型容器 //构造Time类型容器
static std::map<std::string, TimeSTLStruct>Time_STL; static std::map<std::string, TimeSTLStruct>Time_STL;

View File

@ -822,14 +822,14 @@ int squirrel::New_STL(uint32_t v)
} }
//时间容器线程
void TimeSTL(LPVOID lpParam) void TimeSTL(LPVOID lpParam)
{ {
TimeSTLStruct *pack = (TimeSTLStruct*)lpParam; TimeSTLStruct *pack = (TimeSTLStruct*)lpParam;
int F_Time = (int)GetTickCount64(); Time_STL[pack->Name].Static_Time = (int)GetTickCount64();
while (true) while (true)
{ {
int N_Time = (int)GetTickCount64() - F_Time; int N_Time = (int)GetTickCount64() - Time_STL[pack->Name].Static_Time;
if (N_Time < Time_STL[pack->Name].Max_Time) if (N_Time < Time_STL[pack->Name].Max_Time)
{ {
Time_STL[pack->Name].Now_Time = N_Time; Time_STL[pack->Name].Now_Time = N_Time;
@ -855,29 +855,52 @@ int squirrel::Timer_STL(uint32_t v)
SQGetInt(v, 3, &MaxTime); SQGetInt(v, 3, &MaxTime);
//获取容器类型 //获取容器类型
SQGetInt(v, 4, &Type); SQGetInt(v, 4, &Type);
switch (Type) switch (Type)
{ {
case 0: { case 0: {//设置时间容器
if (Time_STL.count(Name) != 0)//如果这个标识容器存在 就返回 否则创建 if (Time_STL.count(Name) != 0)//如果这个标识容器存在 就返回 否则创建
{ {
SQPushBool(v, false); SQPushBool(v, false);
return 1; return 1;
} }
TimeSTLStruct pack; TimeSTLStruct pack;//定义结构体
pack.Name = Name;//设置容器标识名称 pack.Name = Name;//设置容器标识名称
pack.Max_Time = MaxTime;//设置 标识时间容器最大时间 pack.Max_Time = MaxTime;//设置 标识时间容器最大时间
pack.Now_Time = 0;//设置 标识时间容器当前时间 pack.Now_Time = 0;//设置 标识时间容器当前时间
pack.Static_Time = 0;//设置 基础时间(用于运算)
pack.Thand = NULL;//设置句柄为空
Time_STL[Name] = pack;//设置包给标识时间容器 Time_STL[Name] = pack;//设置包给标识时间容器
break; } break; }
case 1: { case 1: {//启动时间容器
DWORD threadID; if (Time_STL[Name].Thand == NULL)//只有句柄为空的时候new线程
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TimeSTL, &Time_STL[Name], 0, &threadID); {
DWORD threadID;//线程ID
Time_STL[Name].Now_Time = 0;//设置当前容器时间
Time_STL[Name].Thand = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TimeSTL, &Time_STL[Name], 0, &threadID);//创建一个新线程 开始计算时间 并把线程赋予给容器
}
break; } break; }
case 2: case 2://获取时间容器
SQPushInt(v, Time_STL[Name].Now_Time); SQPushInt(v, Time_STL[Name].Now_Time);//返回当前容器时间
return 1; return 1;
break; break;
case 3://重置时间容器
SuspendThread(Time_STL[Name].Thand);//挂起线程
Time_STL[Name].Static_Time = 0;//基准时间设置为0
Time_STL[Name].Thand = NULL;
ResumeThread(Time_STL[Name].Thand);//启动线程
break;
case 4://暂停时间容器
SuspendThread(Time_STL[Name].Thand);//挂起线程
break;
case 5://继续时间容器
Time_STL[Name].Static_Time = (int)GetTickCount64() - Time_STL[Name].Now_Time;//当前时间 减去容器时间
ResumeThread(Time_STL[Name].Thand);//启动线程
break;
case 6://销毁时间容器
CloseHandle(Time_STL[Name].Thand);//销毁线程
Time_STL.erase(Name);//销毁容器
break;
default: default:
SQPushBool(v, false); SQPushBool(v, false);
return 1; return 1;