为什么设制定时器在虚拟机中貌似不起作用,在物理机中却正常呢?
虚拟机软件是virtual box,虚拟机和物理机都是ubuntu 12.04
在main.cpp中
//创建一个定时器,每隔一段时间更新用户状态
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);//释放锁
}
在虚拟机下一直看不到信号处理函数打印出的字符串。
在物理机中却正常的。打印如下
chao@chao-ThinkPad-Edge:~/IMProgram/server$ ./server
waiting for the client...
refreshClientStatus trigger.
ClientInfoMap::Refresh被调用.
ClientInfoMap::Refresh被调用.
refreshClientStatus trigger.
ClientInfoMap::Refresh被调用.
ClientInfoMap::Refresh被调用.
refreshClientStatus trigger.
ClientInfoMap::Refresh被调用.
ClientInfoMap::Refresh被调用.
refreshClientStatus trigger.
ClientInfoMap::Refresh被调用.
ClientInfoMap::Refresh被调用.
^C

相关推荐
虚拟机和物理机ping通的方法
虚拟机和物理机ping通的方法
VMware_物理机迁移到虚拟机教程
当VMware vSphere基础架构搭建好后,如何把现有跑在物理机上的应用迁移到虚拟机上呢?这就需要请出VMware vCenter Converter这个工具,此工具可以实现P2V(物理机在线或离线迁移到虚拟机)、V2V(VMware各虚拟机产品之间或和hyper-V之间的转换),以及把第三方的备份镜像迁移入虚拟机,功能那是相当的强大,本文就此产品做一简单介绍。
解决VMware仅主机模式虚拟机无法ping通物理机问题
问题描述 在VMware Workstation中新建了一个虚拟机CentOS7,网络适配器选择的是“仅主机模式”,结果,物理机ping不通虚拟机,虚拟机也ping不通物理机。 原因分析 物理机ping不通虚拟机 (1)虚拟机防火墙的原因,关闭防火墙即可 虚拟机ping不通物理机 (1)ping的地址不对,由于是“仅主机模式”,所以物理机和虚拟机通讯用的网络适配器是VMnet1,因此,ping的时候应该写VMnet1的地址,ping它才是ping宿主机 (2)物理机防火墙的原因,关闭防火墙即可 总结 以上所述是小编给大家介绍的解决VMware仅主机模式虚拟机无法ping通物理机问题,
让物理机通过VMware虚拟机共享上网的一个例子
VMware虚拟机可以上网,但物理机(主机,Host或者其它叫法)不能上网,让物理机通过虚拟机共享上网的一个例子。 关键步骤如下: 1. 利用MS Windows的Internet 连接共享上网的功能,将能上网的网上共享给虚拟机的“本地连接”;通过连接共享上网功能,在设备有限的情况下,还可以利用一台有无线网卡并能通过宽带或其 它形式上网的电脑,为多台电脑提供无线上网的服务,具体的设置自己Google一下。 2. 将VM的虚拟网卡(桥接为VMnet1、NAT为VMnet8,本例为VMnet8)的网关设为虚拟机中“本地连接”的地址,并设置一个同网段的IP地址。 对于找不到天冀3G的USB网卡在64位Win7系统的驱动的朋友来说,本文提供了这样途径。 内有图文
如何将物理机系统迁移转换为VMware虚拟机系统(P2V)
如何将物理机系统迁移转换为VMware虚拟机系统(P2V),VMware Converter P2V 转换工具及安装操作步骤


