简单的Linux C++多线程CLOCK(时钟)类

刚刚加入CSDN博客,初来乍到也不知道写什么,所以来分享一个自己以前学C++的时候写的第一个类,一个关于时钟的简单的Linux多线程CLOCK(时钟)类:


/****************************************************
  ***The FileName: clock.cpp
  *****The Author: Frank ****************************
  *******The Mail: frank.love.u@qq.com **************
  ***Created Time: 2018年09月07日 星期五 11时16分44秒
*****************************************************/
#include <iostream>
#include <ctime>
#include "pthread.h"
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <cstdio>
using namespace std;
class Clock
{
    private:
        struct tm mytime; //用来给对象存储时间的结构体对象
        struct tm *p;

    public:
        int ret;
        explicit Clock(void);
        static void gettime(Clock * s);
        tm settime();
        int setalarm();
        static void *timing(void *argc);            
}; 
explicit Clock::Clock(void)
{
    pthread_t hd; // 线程数据
    time_t temp;  //时间结构体对象
    time(&temp);  //获取系统时间
    p=localtime(&temp); //结构体化时间数据
    //存入Clock类成员中
    mytime.tm_year=p->tm_year;
    mytime.tm_mon=p->tm_mon;
    mytime.tm_mday=p->tm_mday;
    mytime.tm_hour=p->tm_hour;
    mytime.tm_min=p->tm_min;
    mytime.tm_sec=p->tm_sec;

    //开启新的线程让自己的时间跑起来
    if((ret=pthread_create(&hd,NULL,timing,(void *)this))!=0)
    {
        cout<<"pthread create erorr!"<<endl;
        exit(0);
    }
    cout<<"time running"<<endl; 
}
static void Clock::gettime(Clock * s)
{
    time_t temp;
    time(&temp);
    s->p=localtime(&temp);
    s->mytime.tm_year=s->p->tm_year;
    s->mytime.tm_mon=s->p->tm_mon;
    s->mytime.tm_mday=s->p->tm_mday;
    s->mytime.tm_hour=s->p->tm_hour;
    s->mytime.tm_min=s->p->tm_min;
    s->mytime.tm_sec=s->p->tm_sec;
}
//显示时间函数
char * Clock::showtime()
{
    static char buf[100];
    sprintf(buf,"%d年--%d月--%d日   %d:%d:%d",mytime.tm_year+1900,mytime.tm_mon+1,mytime.tm_mday,mytime.tm_hour,mytime.tm_min,mytime.tm_sec);
    cout<<buf<<endl;
    return buf;
}
//自定义设定时间函数
tm Clock::settime()
{
    cout<<"请输入年份:";
    cin>>mytime.tm_year;
    mytime.tm_year=mytime.tm_year-1900;
    cout<<"请输入月份:";
    cin>>mytime.tm_mon; 
    mytime.tm_mon=mytime.tm_mon-1;
    cout<<"请输入日期:";
    cin>>mytime.tm_mday; 
    cout<<"请输入整时:";
    cin>>mytime.tm_hour; 
    cout<<"请输入分钟:";
    cin>>mytime.tm_min; 
    cout<<"请输入秒钟:";
    cin>>mytime.tm_sec;
    return mytime;  
}

//简单的模仿闹钟   
int Clock::setalarm()
{
    int hour,min,sec;
    cout<<"请输入闹钟整时:";
    cin>>hour; 
    cout<<"请输入闹钟分钟:";
    cin>>min; 
    cout<<"请输入闹钟秒钟:";
    cin>>sec; 
    while(1)
    {
        if(mytime.tm_hour==hour)
        {
            if(min==mytime.tm_min)
            {
                if(sec==mytime.tm_sec) 
                {
                    cout<<"主人,时间到了,闹钟响了,快起床了!\n"<<endl;
                    return 0;
                }
            }
        }
    }
}
//线程执行函数
static void * Clock::timing(void *argc)
{
    while(1)
    {
        sleep(1); 
        (*((Clock *)argc)).mytime.tm_sec++;
        if((*((Clock *)argc)).mytime.tm_sec%60==0)
        {
            (*((Clock *)argc)).mytime.tm_sec=0;
            (*((Clock *)argc)).mytime.tm_min++;
            if((*((Clock *)argc)).mytime.tm_min%60==0)
            {
                (*((Clock *)argc)).mytime.tm_min=0;
                (*((Clock *)argc)).mytime.tm_hour++; 
                if((*((Clock *)argc)).mytime.tm_hour%24==0)
                {
                    (*((Clock *)argc)).mytime.tm_hour=0;
                        gettime((Clock *)argc);
                } 
            }                   
        } 
    }
    return NULL;
}       

//主函数内容自己随意调用
int main(void)
{
    Clock obj;//对象创建
    obj.showtime(); //显示时间
    obj.setalarm(); //设置闹钟时间
    obj.showtime(); //显示
    obj.settime();  //设置时间
    obj.showtime();
    while(1)
    {
        sleep(1);
        obj.showtime();
    }
    return 0;
}

以上就是今天要分享的所有内容啦,谢谢您的就读,本人还是个IT界的菜鸟,有大神路过请略过,哈哈,莫嘲笑,嘿嘿,以后有好东西之后再和大家分享,祝各位生活愉快。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值