簡單的Linux C++多執行緒CLOCK(時鐘)類
阿新 • • 發佈:2018-12-10
剛剛加入CSDN部落格,初來乍到也不知道寫什麼,所以來分享一個自己以前學C++的時候寫的第一個類,一個關於時鐘的簡單的Linux多執行緒CLOCK(時鐘)類:
/****************************************************
***The FileName: clock.cpp
*****The Author: Frank ****************************
*******The Mail: [email protected] **************
***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界的菜鳥,有大神路過請略過,哈哈,莫嘲笑,嘿嘿,以後有好東西之後再和大家分享,祝各位生活愉快。