zoukankan      html  css  js  c++  java
  • Tcp/ip实验准备:一个简单的定时器——boost实现

    tcp/ip实验须要在指定的时间查看结果,为了实验方便,做了一个定时器。用法是:

    在命令行输入:timer
    输入数字之后,计时对应秒数
    输入m数字之后。计时对应分钟数(支持小数分钟数)
    输入q退出。
    时间到了之后会有3声蜂鸣,并显示Time is up!

    OK,显示一个进度条会好用一些。

    程序例如以下:

    timer.cpp:

    //g++ timer.cpp -o timer.exe -lboost_thread-mgw48-mt-1_56 -lboost_system-mgw48-1_56 -static
    
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <boost/thread.hpp>
    #include <boost/progress.hpp>
    
    #ifdef WIN32
    #include <fstream>
    #include <unistd.h>
    #define TEMPNAME "WarningTemp~~~~~~.vbs"
    #endif
    
    using namespace std;
    #define MAXLEN 100
    
    int main()
    {
    	printf("This is a simple timer.
    "
    		   "Input sDigits to time the seconds you want.
    "
    		   "Input mDigits to time the minutes you want.
    "
    		   "For example input s9 to time 9 seconds and
    "
    		   "input m1.5 to time 1 minutes and 30 seconds.
    "
    		   "input q to quit.
    ");
    
    	char op;
    	int seconds;
    	double minutes;
    	char beep = 7;
    	char line[MAXLEN];
    	int i;
    
    #ifdef WIN32
    	ofstream out;
    	out.open(TEMPNAME);
    	out << "MsgBox "Time Is Up!"";
    	out.close();
    #endif
    
    	for (;;)
    	{
    start:
    		printf(">> ");
    		for (i = 0;
    			 (op = getchar()) != '
    ' && i < MAXLEN - 1;
    			 ++i)
    			line[i] = op;
    		line[i] = 0;
    		seconds = 0;
    
    		for (i = 0;
    			 line[i] != 0 && i < MAXLEN;
    			 ++i)
    		{
    			op = line[i];
    
    			if (op == 'q')
    				goto EndOfFile;
    			if (op == 'm')
    			{
    				sscanf(line + (++i), "%lf", &minutes);
    				seconds += (int)(minutes * 60);
    				while (isdigit(line[i])
    						|| line[i] == '.'
    						|| isblank(line[i]))
    					i++;
    				--i;
    			} else if (op == 's')
    			{
    				sscanf(line + (++i), "%lf", &minutes);
    				seconds += minutes;
    				while (isdigit(line[i])
    						|| isblank(line[i]))
    					i++;
    				--i;
    			} else if (op == ' ' || op == '	')
    			{
    				continue;
    			} else {
    				printf("Lexical Error!!
    ");
    				goto start;
    			}
    		}
    		boost::progress_display prog(seconds);
    
    		for (i = 0; i < seconds; ++i)
    		{
    			boost::this_thread::sleep
    				(boost::posix_time::seconds(1));
    			++prog;
    		}
    
    		for (i = 0; i < 3; ++i)
    			cout << beep;
    		cout << "Time is up!!!
    " << endl;
    #ifdef WIN32
    		system("wscript " TEMPNAME);
    #else
    		system("gdialog --msgbox "Time Is Up!"");
    #endif
    	}
    EndOfFile:
    #ifdef WIN32
    	system("del /s " TEMPNAME);
    #endif
    
    	return 0;
    }
    




  • 相关阅读:
    洛谷 P1593 因子和
    洛谷 P1167 刷题
    洛谷 P1613 跑路
    洛谷 P1629 邮递员送信
    洛谷 P1654 OSU!
    洛谷 P1967 货车运输
    FPGA开平方的实现
    FPGA设计思想之串并转换
    verilog乘法器的设计
    FPGA浮点数定点数的处理
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6740220.html
Copyright © 2011-2022 走看看