69,371
社区成员
发帖
与我相关
我的任务
分享
//创建一个定时器,每隔一段时间更新用户状态
signal(SIGALRM,refreshClientStatus);
//定时器
struct itimerval timeinter;
timeinter.it_value.tv_sec=5;//初始时间
timeinter.it_value.tv_usec=0;
timeinter.it_interval.tv_sec=5;//间隔时间
timeinter.it_interval.tv_usec=0;
//开启定时器
setitimer(ITIMER_REAL,&timeinter,NULL);
void refreshClientStatus(int)
{
FILE*fp = fopen("info.txt","w");
fprintf(fp,"refreshClientStatus trigger.\n");
fclose(fp);
pclientinfomap->Refresh();
}
//.....
void ClientInfoMap::Refresh(void)
{
map<string,ClientInfo>::iterator it;
pthread_mutex_lock(&lock);//加锁
for(it=pmap->begin(); it!=pmap->end(); ++it)
{
if(-- ((it->second).status) == OFFLINE)
{
DeleteWithoutMux(it->first);//删除
}
}
cout<<"ClientInfoMap::Refresh被调用.\n";
pthread_mutex_unlock(&lock);//释放锁
}