2211
This commit is contained in:
parent
191fcd3da9
commit
89f85d0ea7
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue