c++程序中实现时间控制的方法

我想编写一个c++程序,实现的是比如猜一个数字,如果一分钟后还没猜出来,就提示说时间到,然后立即退出猜的程序(∩_∩)

c++

4个回答

定义一个布尔值的全局变量,开启一个线程在一分钟内不断去判断这个变量。

最笨的办法

顶一个一个定时器,定时1分钟,在你点击开始猜的时候,启动定时器,如果在1分钟内猜出来,那就停止定时器,如果1分钟到了,定时器就就会触发Timerout信号
完了你接受到这个信号的时候,就可以执行退出程序

不知道你的开发环境是什么

一下代码为Qt
QTimer timer;

//关联你的timer和时间到了1分钟的函数操作
connect(&timer,SIGNAL(timeout()),this,SLOT(slot_timerout()));


//当你点击开始的时候执行这条语句
timer.start(1000);
//当你在一分钟内才到数据,执行这条语句
timer.stop();

//这个就是定时器到时回触发的函数,把你的关闭函数实现到这里就好了
void MainWindow::slot_timerout()
{
    this->close();

}

    仅供参考

    或者就是向其它大神写的一样使用线程和全局标志来实现

这个很简单,开启一个线程,线程sleep30次,每次|秒,如果没有处理直接退出

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何在c语言中控制时间啊,

例如,在运行时需要输入,如果过了时间,就不允许输入,该怎么弄,求大神帮忙

求代码,求代码,在Ubuntu下编制一个程序,模拟实现一个简单的进程管理子系统,它由进程建立模块、进程撤消模块、进程控制表组成,并包括进程切换和调度模块?

在Ubuntu下编制一个程序,模拟实现一个简单的进程管理子系统,它由进程建立模块、进程撤消模块、进程控制表组成,并包括进程切换和调度模块。 【设计要求1】 该子系统接收新进程建立请求的方式是循环显示“请输入新命令行”,然后根据用户键入内容启动相应进程,其后不等待子进程结束,马上显示下一个“请输入新命令行”如此循环往复。 当建立进程时,相应读写进程控制表,然后借助底层环境OS中像fork和exec这样的函数将新进程投入运行(这与底层环境的实际OS不同,实际OS将新进程投入运行时要布置现场,最后时程序技术器寄存器)。进程撤消时,利用底层OS的wait( )从子进程回到本子系统,相应修改PCB。 比较该子系统与实际系统中的相应功能的异同与差距,尤其在现场保存与恢复方面的比较。 【设计要求2】 在上题的基础上,进一步模拟实现进程切换。希望能实现时间片满或接到sleep调用(或信号时)进行进程切换(选择其一即可)。 若要实现时间片,假设时间片为1秒钟,设定底层环境OS每个1秒向该系统发一个信号,本子系统将本子系统的进程切换和调度模块设定为该信号的处理程序。或者每当接到子进程发出的的sleep调用(或信号)时进行进程切换,这里子进程发出的sleep调用(或信号)代表实际系统中可能发生的sleep( )调用、等待某一时间发生等情况,进程调度采用简单的FIFO算法。

C语言中,对一段函数进行超时判断,请问怎么实现?

windows下的C语言编程,需要对一段第三方dll中的函数进行超时控制,参考了很多种技术都没实现,请问该如何解决。 先说说我想到的东西: 1.<unistd.h>中的alarm,这玩意儿在Linux下有效,在Windows中无法使用,即使我用的MinGW标准gcc编译器。 2.<windows.h>中的timeSetEvent,配合<setjmp.h>中的setjmp和longjmp,这个是最接近的,可惜运行到超时时中断是中断了,可是一直会弹窗报错,不知道为什么。 我在下面的评论中把第二个思路的代码贴出来,再截一个弹窗报警的图。 请教C语言和Win32API高手帮忙看看。 ``` 作者:丁丁 链接:https://www.zhihu.com/question/49052307/answer/113997254 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <setjmp.h> jmp_buf j; /** * 时间中断函数 */ void PASCAL OneMilliSecondProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dwl, DWORD dw2) { printf("Timout!\n"); longjmp(j,1); } int longTimeFunction(){ while (1) { printf("operating...\n"); Sleep(1000); } return 0; } int main(){ HANDLE hHandle; UINT wTimerRes_1ms;//定义时间间隔 UINT wAccuracy; //定义分辨率 UINT TimerID_1ms; //定义定时器句柄 wTimerRes_1ms = 5000; if((TimerID_1ms = timeSetEvent( wTimerRes_1ms, wAccuracy, (LPTIMECALLBACK)OneMilliSecondProc, // 回调函数 (DWORD)(1), // 用户传送到回调函数的数据; TIME_PERIODIC//周期调用定时处理函数 )) == 0) { printf("start!!!!!!!!!!!\n"); } else { printf("end!!!!!!!!!!!\n"); } int temp = 0; if(setjmp(j) == 0){ temp = longTimeFunction(); }else{ printf("xxxxxx...\n"); temp = -1; } printf("%d\n", temp); return 0; } ``` ![图片说明](https://img-ask.csdn.net/upload/201607/30/1469849217_947073.png)

51单片机利用两个外部中断(和一个定时器)计算两个中断的时间间隔的C语言程序。谢谢了

51单片机利用两个外部中断(和一个定时器)计算两个中断的时间间隔的C语言程序。谢谢了 。万分感谢。。。

C语言如何实现读取键盘信息,如果一段时间检测键盘没有输入,就跳过,执行下面的代码?

在做一个C语言的大球吃小球的游戏,通过键盘WASD来控制大球移动,在大球移动的同时小球也移动,在一个大循环里,我试了getch(),可是如果没有键盘输入就会卡住,有没有方法可以在比较短时间内检测,如果没有的话就不再等待了,执行下面的步骤。不用多线程的方法怎么实现啊?谢谢!

linux下某程序中实现对进程的实时流量监控功能

求大牛赐教 现在开发了一个程序,在linux下跑,想在里面加一个对特定进程的网络流量监控,实时统计进程流量大小 现在想到的办法就是用libpcap库,对应/proc里面文件按照pid 端口号 数据包 数据大小 进行统计得出当前流量大小。 目前有如下问题: 1.程序中已有功能中已经使用了libpcap去抓去一段数据包然后输出libpcap文件,如果按照上述办法,会不会造成再用libpcap采集数据包出问题?或者说libpcap可不可以多次同时抓取同一个数据包? 2.一定要在程序内部实现,目前知道的的可监听端口的软件,都有独立的显示界面,没有办法后台运行然后把统计信息放到我自己的程序里面,有没有可行的软件可以通过我自己的程序去调用然后获取统计信息? 要是都不行。。。linux怎么通过api获取进程网络流量信息或者数据包。。。 求解

【求帮忙】来个大神帮忙写一个脉冲程序的C语言代码

现在需要用PC直接控制步进电机驱动进而来控制步进电机的启停,转动。兄弟我是一点都不会,所以特来此求大神给一个代码。只要能输出高低电平和方波的脉冲就好了!在此谢过啦!!!下面是驱动器型号和基本信息![![图片说明](https://img-ask.csdn.net/upload/201505/10/1431255085_682948.png)图片说明](https://img-ask.csdn.net/upload/201505/10/1431255076_255263.png)

帮我改C语言代码(51单片机LCD1602显示时间从k1这些按键控制变成矩阵按键控制)

帮我改C语言代码,51单片机LCD1602显示时间从k1这些按键控制变成矩阵按键控制(现在是可以用k1这些按键来修改了) 原理图: ![图片说明](https://img-ask.csdn.net/upload/201912/22/1577010044_884857.png) ![图片说明](https://img-ask.csdn.net/upload/201912/22/1577010062_997331.png) 下面是代码: ``` //下面是main.c代码 /******************************************************************************* * 实验名 : 万年历实验 * 使用的IO : * 实验效果 :1602显示时钟,按K3进入时钟设置,按K1选择设置的时分秒日月,按K2选择 *选择设置加1。 * 注意 : *******************************************************************************/ #include<reg51.h> #include"lcd.h" #include"ds1302.h" sbit K1=P3^1; sbit K2=P3^0; sbit K3=P3^2; sbit K4=P3^3; //管脚接线 void Int0Configuration(); void LcdDisplay(); unsigned char SetState,SetPlace; void Delay10ms(void); //误差 0us /******************************************************************************* * 函数名 : main * 函数功能 : 主函数 * 输入 : 无 * 输出 : 无 *******************************************************************************/ void main() { unsigned char i; Int0Configuration(); LcdInit(); Ds1302Init(); while(1) { if(SetState==0) { Ds1302ReadTime(); } else { if(K1==0) //检测按键K1是否按下 { Delay10ms(); //消除抖动 if(K1==0) { SetPlace++; if(SetPlace>=7) SetPlace=0; } while((i<50)&&(K1==0)) //检测按键是否松开 { Delay10ms(); i++; } i=0; } if(K2==0) //检测按键K2是否按下 { Delay10ms(); //消除抖动 if(K2==0) { TIME[SetPlace]++; if((TIME[SetPlace]&0x0f)>9) //换成BCD码。 { TIME[SetPlace]=TIME[SetPlace]+6; } if((TIME[SetPlace]>=0x60)&&(SetPlace<2)) //分秒只能到59 { TIME[SetPlace]=0; } if((TIME[SetPlace]>=0x24)&&(SetPlace==2)) //小时只能到23 { TIME[SetPlace]=0; } if((TIME[SetPlace]>=0x32)&&(SetPlace==3)) //日只能到31 { TIME[SetPlace]=0; } if((TIME[SetPlace]>=0x13)&&(SetPlace==4)) //月只能到12 { TIME[SetPlace]=0; } if((TIME[SetPlace]>=0x7)&&(SetPlace==5)) //周只能到7 { TIME[SetPlace]=1; } // if(SetPlace==5) //月只能到12 // { // TIME[SetPlace]=; // } } while((i<50)&&(K2==0)) //检测按键是否松开 { Delay10ms(); i++; } i=0; } } LcdDisplay(); } } /******************************************************************************* * 函数名 : LcdDisplay() * 函数功能 : 显示函数 * 输入 : 无 * 输出 : 无 *******************************************************************************/ void LcdDisplay() { LcdWriteCom(0x80+0X40); LcdWriteData('0'+TIME[2]/16); //时 LcdWriteData('0'+(TIME[2]&0x0f)); LcdWriteData('-'); LcdWriteData('0'+TIME[1]/16); //分 LcdWriteData('0'+(TIME[1]&0x0f)); LcdWriteData('-'); LcdWriteData('0'+TIME[0]/16); //秒 LcdWriteData('0'+(TIME[0]&0x0f)); LcdWriteCom(0x80); LcdWriteData('2'); LcdWriteData('0'); LcdWriteData('0'+TIME[6]/16); //年 LcdWriteData('0'+(TIME[6]&0x0f)); LcdWriteData('-'); LcdWriteData('0'+TIME[4]/16); //月 LcdWriteData('0'+(TIME[4]&0x0f)); LcdWriteData('-'); LcdWriteData('0'+TIME[3]/16); //日 LcdWriteData('0'+(TIME[3]&0x0f)); LcdWriteCom(0x8D); LcdWriteData('0'+(TIME[5]&0x07)); //星期 } /******************************************************************************* * 函数名 : Int0Configuration() * 函数功能 : 配置外部中断0 * 输入 : 无 * 输出 : 无 *******************************************************************************/ void Int0Configuration() { //设置INT0 IT0=1;//跳变沿出发方式(下降沿) EX0=1;//打开INT0的中断允许。 EA=1;//打开总中断 } /******************************************************************************* * 函数名 : Int0() * 函数功能 : 外部中断0 中断函数 * 输入 : 无 * 输出 : 无 *******************************************************************************/ void Int0() interrupt 0 { Delay10ms(); if(K3==0) { SetState=~SetState; SetPlace=0; Ds1302Init(); } } /******************************************************************************* * 函数名 : Delay10ms * 函数功能 : 延时函数,延时10ms * 输入 : 无 * 输出 : 无 *******************************************************************************/ void Delay10ms(void) //误差 0us { unsigned char a,b,c; for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } //下面为ds1302.c代码 #include"ds1302.h" //---DS1302写入和读取时分秒的地址命令---// //---秒分时日月周年 最低位读写位;-------// uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; //---DS1302时钟初始化2013年1月1日星期二12点00分00秒。---// //---存储顺序是秒分时日月周年,存储格式是用BCD码---// uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01, 0x02, 0x13}; /******************************************************************************* * 函 数 名 : Ds1302Write * 函数功能 : 向DS1302命令(地址+数据) * 输 入 : addr,dat * 输 出 : 无 *******************************************************************************/ void Ds1302Write(uchar addr, uchar dat) { uchar n; RST = 0; _nop_(); SCLK = 0;//先将SCLK置低电平。 _nop_(); RST = 1; //然后将RST(CE)置高电平。 _nop_(); for (n=0; n<8; n++)//开始传送八位地址命令 { DSIO = addr & 0x01;//数据从低位开始传送 addr >>= 1; SCLK = 1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK = 0; _nop_(); } for (n=0; n<8; n++)//写入8位数据 { DSIO = dat & 0x01; dat >>= 1; SCLK = 1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK = 0; _nop_(); } RST = 0;//传送数据结束 _nop_(); } /******************************************************************************* * 函 数 名 : Ds1302Read * 函数功能 : 读取一个地址的数据 * 输 入 : addr * 输 出 : dat *******************************************************************************/ uchar Ds1302Read(uchar addr) { uchar n,dat,dat1; RST = 0; _nop_(); SCLK = 0;//先将SCLK置低电平。 _nop_(); RST = 1;//然后将RST(CE)置高电平。 _nop_(); for(n=0; n<8; n++)//开始传送八位地址命令 { DSIO = addr & 0x01;//数据从低位开始传送 addr >>= 1; SCLK = 1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK = 0;//DS1302下降沿时,放置数据 _nop_(); } _nop_(); for(n=0; n<8; n++)//读取8位数据 { dat1 = DSIO;//从最低位开始接收 dat = (dat>>1) | (dat1<<7); SCLK = 1; _nop_(); SCLK = 0;//DS1302下降沿时,放置数据 _nop_(); } RST = 0; _nop_(); //以下为DS1302复位的稳定时间,必须的。 SCLK = 1; _nop_(); DSIO = 0; _nop_(); DSIO = 1; _nop_(); return dat; } /******************************************************************************* * 函 数 名 : Ds1302Init * 函数功能 : 初始化DS1302. * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void Ds1302Init() { uchar n; Ds1302Write(0x8E,0X00); //禁止写保护,就是关闭写保护功能 for (n=0; n<7; n++)//写入7个字节的时钟信号:分秒时日月周年 { Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]); } Ds1302Write(0x8E,0x80); //打开写保护功能 } /******************************************************************************* * 函 数 名 : Ds1302ReadTime * 函数功能 : 读取时钟信息 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void Ds1302ReadTime() { uchar n; for (n=0; n<7; n++)//读取7个字节的时钟信号:分秒时日月周年 { TIME[n] = Ds1302Read(READ_RTC_ADDR[n]); } } //下面是lcd.c代码 #include"lcd.h" /******************************************************************************* * 函 数 名 : Lcd1602_Delay1ms * 函数功能 : 延时函数,延时1ms * 输 入 : c * 输 出 : 无 * 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。 *******************************************************************************/ void Lcd1602_Delay1ms(uint c) //误差 0us { uchar a,b; for (; c>0; c--) { for (b=199;b>0;b--) { for(a=1;a>0;a--); } } } /******************************************************************************* * 函 数 名 : LcdWriteCom * 函数功能 : 向LCD写入一个字节的命令 * 输 入 : com * 输 出 : 无 *******************************************************************************/ #ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时 void LcdWriteCom(uchar com) //写入命令 { LCD1602_E = 0; //使能 LCD1602_RS = 0; //选择发送命令 LCD1602_RW = 0; //选择写入 LCD1602_DATAPINS = com; //放入命令 Lcd1602_Delay1ms(1); //等待数据稳定 LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5); //保持时间 LCD1602_E = 0; } #else void LcdWriteCom(uchar com) //写入命令 { LCD1602_E = 0; //使能清零 LCD1602_RS = 0; //选择写入命令 LCD1602_RW = 0; //选择写入 LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改 Lcd1602_Delay1ms(1); LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5); LCD1602_E = 0; // Lcd1602_Delay1ms(1); LCD1602_DATAPINS = com << 4; //发送低四位 Lcd1602_Delay1ms(1); LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5); LCD1602_E = 0; } #endif /******************************************************************************* * 函 数 名 : LcdWriteData * 函数功能 : 向LCD写入一个字节的数据 * 输 入 : dat * 输 出 : 无 *******************************************************************************/ #ifndef LCD1602_4PINS void LcdWriteData(uchar dat) //写入数据 { LCD1602_E = 0; //使能清零 LCD1602_RS = 1; //选择输入数据 LCD1602_RW = 0; //选择写入 LCD1602_DATAPINS = dat; //写入数据 Lcd1602_Delay1ms(1); LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5); //保持时间 LCD1602_E = 0; } #else void LcdWriteData(uchar dat) //写入数据 { LCD1602_E = 0; //使能清零 LCD1602_RS = 1; //选择写入数据 LCD1602_RW = 0; //选择写入 LCD1602_DATAPINS = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改 Lcd1602_Delay1ms(1); LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5); LCD1602_E = 0; LCD1602_DATAPINS = dat << 4; //写入低四位 Lcd1602_Delay1ms(1); LCD1602_E = 1; //写入时序 Lcd1602_Delay1ms(5); LCD1602_E = 0; } #endif /******************************************************************************* * 函 数 名 : LcdInit() * 函数功能 : 初始化LCD屏 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ #ifndef LCD1602_4PINS void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x38); //开显示 LcdWriteCom(0x0c); //开显示不显示光标 LcdWriteCom(0x06); //写一个指针加1 LcdWriteCom(0x01); //清屏 LcdWriteCom(0x80); //设置数据指针起点 } #else void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x32); //将8位总线转为4位总线 LcdWriteCom(0x28); //在四位线下的初始化 LcdWriteCom(0x0c); //开显示不显示光标 LcdWriteCom(0x06); //写一个指针加1 LcdWriteCom(0x01); //清屏 LcdWriteCom(0x80); //设置数据指针起点 } #endif ```

关于“用C语言实现模拟操作系统进程调度先来先服务”代码中的问题

代码如下,其中从for循环开始,至函数截止所表达的意思和作用我不太明白,求大神尽快解答!!!麻烦了,谢谢!!! float response_ratio(jobtable job[],int n)/*模拟当前作业表的调度过程*/ { int i,j,temp; float average_time,ratio1,ratio2; job[0].begin_run=job[0].in_well; job[0].end_run=job[0].begin_run+job[0].run_time; job[0].turnover_time=job[0].end_run-job[0].begin_run; average_time=job[0].turnover_time; for(i=1;i<n;i++) { if(job[i].in_well<=job[i-1].end_run) { j=i+1;temp=i; ratio1=1+(job[i-1].end_run-job[i].in_well)*1.0/job[i].run_time; while(j<n&&job[j].in_well<=job[i-1].end_run) { ratio2=1+(job[i-1].end_run-job[j].in_well)*1.0/job[j].run_time; if(ratio2>ratio1) temp=j; j++; } if(temp!=i) swap(job,i,temp); } job[i].begin_run=job[i-1].end_run; job[i].end_run=job[i].begin_run+job[i].run_time; job[i].turnover_time=job[i].end_run-job[i].in_well; average_time=average_time+job[i].turnover_time; } return(average_time/n); }

c语言代码进行除法运算

1,c语言代码进行除法运算时如何控制商不能为0的情况? 2,怎样在进行除法运算时,输出更精确的结果?

在Linux下用c语言编写,用UDP和TCP两种方式

用UDP和TCP两种方式,编写C/S结构程序,能上传下载暂停续传文件,客户端能显示进度,能随时终止上传下载,要求传输速度尽可能快、控制和传输独立线程处理 目的:熟悉阻塞和非阻塞SOCKET编程,熟悉如何安全使用线程,如何同步和互斥

设计一款数字时钟,实时显示时间设置修改时间,有倒计时功能。求大神解答

设计一款数字时钟,实时显示时间(格式为时:分:秒),可以设置修改时间,并具有倒计时功能。

帮忙用c写个小程序,关于教师公积金缴纳金额计算

教师公积金缴纳金额计算 功能描述: 某中学教师每月需要根据工资的总额来确定当月需要缴纳的公积金,而当月工资除了基本工资1500元以外,还包括绩效工资,绩效工资和三个因素有关,当月的值班天数,当月的监考次数以及当月的上课次数。(教师每值班一天能够获得60元的收入,每监考一次能获得30元的收入,每上课一次能获得64元的收入) 公积金的缴纳额需要根据工资总额按照一定的比例进行上交。 处理过程描述 输入: 值班天数:整型,教师每月的值班天数不少于5天,不能超过正常工作日22天。 监考次数:整型,教师监考次数不能超过10次。 上课次数:整型,上课次数不能超过30次。 值班天数,如果非整型输入,给出错误提示,如果输入范围错误,给出错误提示。 监考次数,如果非整型输入,给出错误提示,如果输入范围错误,给出错误提示。 上课次数,如果非整型输入,给出错误提示,如果输入范围错误,给出错误提示。 计算公积金: 工资总额=基本工资+绩效工资 绩效工资=值班收入+监考收入+上课收入 值班收入=值班天数×值班的天收入 监考收入=监考次数×监考次收入 上课收入=上课次数×上课次收入 需缴纳的公积金=工资总额大于5000的部分×0.25+工资总额大于4000小于5000的部分×0.2+工资总额大于2000小于4000的部分×0.15+工资总额小于2000的部分×0.1 输出: 绩效工资总额,工资总额,需要缴纳的公积金 测试任务 整个测试所包含的内容: 1、用C语言写出教师公积金缴纳问题的程序,并简单测试,确保程序基本正确 (特别说明:进一步实现其他任何非整型输入的情况,比如输入字符,建议用单独的函数实现判断,在主函数中调用此函数判断值班数/监考数/上课数是否为整数) 2、用visio画出程序所对应的流程图 3、写白盒测试用例,包含语句覆盖,判定覆盖,条件覆盖,判定-条件覆盖,条件组合覆盖,基本路径测试(根据控制流图,同样需要使用visio画出) 4、写黑盒测试用例,包含等价类划分法,边界值法,判定表法(额外补充:时间允许情况下,再用visio画出因果图法) 5、两两交叉进行测试所有黑盒和白盒测试的用例,比较测试结果和预期的结果 6、形成黑盒测试以及白盒测试的大报告

操作系统课设:服务器并行访问控制

设计题目:服务器并行访问控制 要求: 1、创建3个服务器线程。 2、创建1个服务器并行管理线程 3、创建10个客户线程,随机想服务管理线程提出访问请求,如果没有得到响应,随机选择一段时间重新发出请求。 4、显示服务线程与客户线程的对应关系。 本人对线程这块理解不是太好,题目没有思路,求助大神! 能用java实现是最好

求模拟三辆火车调度系统得程序

一、参数配置 1、火车数量:最小为3 2、火车类型:快车、慢车 3、火车运行方向:顺时针、逆时针 4、火车启动运行位置:有默认值,系统运行时可修改初始配置 5、火车启动时间:0表示即可启动,其它整数值表示系统运行整数秒后启动 6、火车运行速度:每秒移动的距离 7、火车占用公共轨道停靠时间:0表示不占用,单位为秒,值不0为要占用时,要求在公共轨道中间停靠。 二、火车基本要求 1、至少有三辆小火车 (如图1所示)。 2、小火车各自分别沿参数指定方向行驶在自己的闭合轨道上。当运行到公共轨道时 需监测是否会有冲突发生,如当火车A在公共轨道上运行的时候,另一辆火车B如果也想进入公共轨道,则必须等待,直到列车A离开了公共轨道,让出该段轨道。为了防止两辆火车在公共轨道上相撞,必须要有一个中央控制系统来调度火车的运行。 3、为了能及时识别火车想进入公共轨道或者已经离开公共轨道,在公共轨道等待进入和驶出轨道双方向上,分别安装两个探测点,当探测点发现火车经过此点时,将会发送信号给中央控制系统,中央控制系统根据发送信号的是哪个探测点,识别出是哪辆火车想进入或者驶出公共轨道。 ![图片说明](https://img-ask.csdn.net/upload/201605/07/1462620769_652219.png) 三.火车的运行控制 1.火车从启动位置开始运行,除非因为等待公共轨道的释放而暂停,或者被人为停止,否则会一直运行。 2.必须要保证所有火车有序运行,交替使用公共轨道。 3.火车的运行速度等参数可以在配置文件中设置,也可在系统刚开始运行时提示是否修改默认配置,如果是则可以修改默认参数。 4.在火车运行期间,火车除了因为等待公共轨道的释放而暂停,也可能由于某些特殊原因被人为停止,用户可以通过输入命令信号来控制火车的暂停和继续运行。 5. 如果火车在公共轨道停靠时间不为0时,要求在轨道中间位置停靠,并以秒为单位显示停靠倒计时的时间。 四.火车运行的控制策略 如果出现2个监测点同时向中央控制中心发信号,提示火车要进入公共运行轨道,这时需要根据以下三种策略来决定哪辆火车被允许进入。 交替策略:快、慢车交替使用公共轨道。第一次出现同时申请进入的情况时,让A车先行,第二次时让B车先行,第三次还是让A车先行,第四次B车先行。 快车优先策略:根据火车的运行速度,选择快车优先通过,慢车等待快车通过后再进入公共轨道,同级别情况下采用交替策略。 人工控制策略:当同时有多辆车请求进入公共轨道时,可以人工控制指定某辆车进入,其它车等待。 五.输入输出 要求开发两个版本:命令行版本和动画版本。具体说明如下: 命令行版本,要求实现键盘输入、命令行输出,并将输出结果记录到文件。 动画版本,要求实现图形界面输入、动画输出,并将输出结果记录到文件。 (一)输入 一系列的火车控制信息和调度命令。输入数据包括以下两种: 1)初始化信息,包括:各辆火车的车速、启动时间(相对于程序开始运行时间,以秒为单位)、启动位置以及探测点位置等,参见内容一说明。轨道宽度、高度、位置坐标可为常量。 2)暂停或者继续某辆火车运行的控制信号。 输入方式可以采用两种方法: a.从键盘输入。例如:可以在程序刚开始运行时,先提示用户从键盘输入初始化信息;运行中从键盘接受小火车的控制信号。以A车示例,可以设定初始化信息的输入顺序如下: [A Speed] //A运行速度 [A StartTime] //启动时间,0表示即刻启动 [A StartPoint] //A启动位置(例如将A轨道分为0-12点刻度,启动位置在0点) [A InPoint] //A进入公共轨道探测点的位置,可以是绝对坐标,也可以是相对公共轨道的距离 [A OutPoint] //A驶出公共轨道探测点位置,可以是绝对坐标,也可以是相对公共轨道的距离 [A Type] //火车类型,1快车,2慢车;也可根据火车速度规定快慢判别区间 开始运行后,以A车示例,可以设定控制信号的按键如下: A车暂停:‘PA’ A车继续:‘CA’ b.图形界面输入。程序运行时,先提示是否修改默认配置,若修改则首先出现初始化信息录入界面,在文本框中输入全部的初始化信息。然后程序根据这些参数绘制主画面。在主画面中,鼠标第一次点击小火车时,小火车启动运行,再次点击小火车时,火车暂停。火车申请进入公共轨道时,探测点点亮。 (二)输出: a.命令行输出: 两种方案:(1)周期性在命令行窗口打印出各辆火车的状态信息,包括:运行到轨道的哪个位置、状态(运行-非公共轨道,运行-公共轨道、暂停-等待公共轨道、停靠-占用公共轨道)。(2)当小火车状态发生变化时,如刚启动时,或从暂停变为运行,或申请进入公共轨道,获准进入时,在命令行窗口打印出小火车当前新的位置、暂停还是运行、是否等候进入、进入/驶出等。 b.动画显示:在窗口中显示小火车在绘制的轨道中匀速运行的动画,显示每段公共轨道的四个探测点,显示调度控制面板。为了直观显示调度的结果,当火车被允许进入公共轨道时,有绿色信号灯点亮;若调度错误,导致两车在轨道上相撞,要模拟撞车效果。 c.火车运行情况的记录(结果)文件。 记录文件也是文本文件,每一行表示一个时刻的火车运行状态,包括以下内容: 当前时间:程序开始运行的系统时钟时间,单位秒。 火车运行方向:顺时针、逆时针。 火车当前位置:0.0-12.0。假如将A轨道分为0-12点刻度,当前位置在几点。因有多条轨道,还需有字符表示某辆火车当前处于那个轨道。 火车当前状态:运行-非公共轨道,运行-公共轨道、暂停-等待公共轨道、停靠-占用公共轨道。 每个数据项之间用一个空格隔开。

51单片机用一个按钮控制流水灯的启停

#include<reg51.h> #include<intrins.h> #define uchar unsigned char #define unit unsigned int sbit key=P3^1; uchar a,d; delay( uchar); void main() { if(key==0) { while(1) { d=0xfe; for(a=8;a>0;a--) { P0=d; delay(50); d=_crol_(d,1); } d=0x7f; for(a=8;a>0;a--) { P0=d; delay(50); d=_cror_(d,1); } } } else P0=0xff; } delay( uchar x) { uchar b,c; for (b=500;b>0;b--) for (c=x;c>0;c--); } 以上是本人写的程序,它只能启动流水灯,不能停止流水灯。求各位大神指点一下!!!

谁有6路抢答器的设计呀?求大神帮忙!!!

(1)以单片机为核心,设计一个6位竞赛抢答器:同时供6名选手或6个代表队比赛,分别用6个按钮S0~S5表示。 (2)给节目主持人设置5个控制开关,用来控制系统的清零和抢答的开始及各种时间的调节控制; (3)抢答器具有数据锁存功能、显示功能和声光提示功能; (4)主持人可以通过两个时间调节键来调节抢答限制时间和答题限制时间。需在主持人按下抢答开始按钮后抢答方可开始,且各个环节都有相应时间限制。 最好是用C语言编程的

c语言多线程问题,快速创建多个线程!

for(int i=10;i>0;i--) pthread_create(&pid,NULL,doit,NULL); 怎么创建出来的线程ID是重复的啊?应该怎么处理快速创建线程的时候,线程ID会复用?

msp430F5438程序,为什么不能在中断中关本中断

比如我做了一个十字路口红绿灯的控制程序: 1. 东西的道路为主干道,一般保持绿灯畅通,而南北向为人流很小的人行道,一般保持红灯禁行。当一行人想要通行南北向时,他可以通过按按钮使南北向转为绿灯而东西向则变为红灯,从而得以通过人行路口。 2.注意,按过按钮后南北向人行道绿灯通行时间为15秒,之后南北向恢复红灯而东西向主干道再次绿灯畅通,即回归初始状态。另外,恢复初始状态后的10秒内,一直保持东西绿南北红的状态,按钮不会起作用。 3.我的想法是,在P2.7口的输入中断子程序中,通过延时15秒使南北变绿东西变红15秒,先“关闭P2.7的中断使能”,以实现上面的:“恢复初始状态后的10秒内,一直保持东西绿南北红的状态,按钮不会起作用”。其中,“P2.7不起作用”的10秒时间由后面的“启动定时器”函数计时。 4.计满10秒后,在定时器中断子程序中再重新“打开P2.7中断使能”,同时“关闭定时器”。 5.c语言程序如下 ![图片说明](https://img-ask.csdn.net/upload/201701/20/1484885254_731385.png) 问题是:为什么io中断无法关闭,定时器中断进不去? 现在我身边没有板子也没法验证,电路用延时验证过没问题,就是程序问题,请感兴趣的朋友帮忙看看可能是什么问题,谢谢大家

Ubuntu下的linux编程C语言,c++都可,需要代码,会做的私信

实现一个进程管理子系统 【问题描述】 在Ubuntu下编制一个程序,模拟实现一个简单的进程管理子系统,它由进程建立模块、进程撤消模块、进程控制表组成,并包括进程切换和调度模块。 【设计要求1】 该子系统接收新进程建立请求的方式是循环显示“请输入新命令行”,然后根据用户键入内容启动相应进程,其后不等待子进程结束,马上显示下一个“请输入新命令行”如此循环往复。 当建立进程时,相应读写进程控制表,然后借助底层环境OS中象fork和exec这样的函数将新进程投入运行(这与底层环境的实际OS不同,实际OS将新进程投入运行时要布置现场,最后时程序技术器寄存器)。进程撤消时,利用底层OS的wait( )从子进程回到本子系统,相应修改PCB。 比较该子系统与实际系统中的相应功能的异同与差距,尤其在现场保存与恢复方面的比较。 【设计要求2】 在上题的基础上,进一步模拟实现进程切换。希望能实现时间片满或接到sleep调用(或信号时)进行进程切换(选择其一即可)。 若要实现时间片,假设时间片为1秒钟,设定底层环境OS每个1秒向该系统发一个信号,本子系统将本子系统的进程切换和调度模块设定为该信号的处理程序。或者每当接到子进程发出的的sleep调用(或信号)时进行进程切换,这里子进程发出的sleep调用(或信号)代表实际系统中可能发生的sleep( )调用、等待某一时间发生等情况,进程调度采用简单的FIFO算法。

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《Oracle Java SE编程自学与面试指南》最佳学习路线图2020年最新版(进大厂必备)

正确选择比瞎努力更重要!

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

都前后端分离了,咱就别做页面跳转了!统统 JSON 交互

文章目录1. 无状态登录1.1 什么是有状态1.2 什么是无状态1.3 如何实现无状态1.4 各自优缺点2. 登录交互2.1 前后端分离的数据交互2.2 登录成功2.3 登录失败3. 未认证处理方案4. 注销登录 这是本系列的第四篇,有小伙伴找不到之前文章,松哥给大家列一个索引出来: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密...

字节跳动面试官竟然问了我JDBC?

轻松等回家通知

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

阿里面试官让我用Zk(Zookeeper)实现分布式锁

他可能没想到,我当场手写出来了

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

立即提问
相关内容推荐