麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

C++多線(xiàn)程編程(線(xiàn)程類(lèi))

2019-11-14 10:54:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

簡(jiǎn)述

通過(guò)線(xiàn)程類(lèi)來(lái)管理線(xiàn)程,實(shí)現(xiàn)業(yè)務(wù)邏輯與線(xiàn)程管理分離

源代碼

接口類(lèi) SFRunnable.h

class SFRunnable{ public: virtual ~SFRunnable() {}; virtual void Run() = 0;};

線(xiàn)程類(lèi) SFThread.h

#ifndef __SFTHREAD_H__#define __SFTHREAD_H__#include <string>#include <windows.h>#include <SFThread.cpp

#include "SFThread.h"SFThread::SFThread(void) : m_pRunnable(NULL),m_bRun(false)//進(jìn)入構(gòu)造函數(shù)之前 先初始化 成員變量 有一些成員變量 必須先初始化 比如常量什么的{}SFThread::~SFThread(void){}SFThread::SFThread(SFRunnable * pRunnable) : m_ThreadName(""),m_pRunnable(pRunnable),m_bRun(false){}SFThread::SFThread(const char * ThreadName, SFRunnable * pRunnable) : m_ThreadName(ThreadName),m_pRunnable(pRunnable),m_bRun(false){}SFThread::SFThread(std::string ThreadName, SFRunnable * pRunnable) : m_ThreadName(ThreadName),m_pRunnable(pRunnable),m_bRun(false){}bool SFThread::Start(bool bSuspend){ if(m_bRun) { return true; } if(bSuspend) { m_handle = (HANDLE)_beginthreadex(NULL, 0, StaticThreadFunc, this, CREATE_SUSPENDED, &m_ThreadID); } else { m_handle = (HANDLE)_beginthreadex(NULL, 0, StaticThreadFunc, this, 0, &m_ThreadID); } m_bRun = (NULL != m_handle); return m_bRun;}void SFThread::Run(){ if(!m_bRun)//如果沒(méi)運(yùn)行 { return; } if(NULL != m_pRunnable)//如果句柄不為空 { m_pRunnable->Run(); } m_bRun = false;}void SFThread::Join(int timeout){ if(NULL == m_handle || !m_bRun) { return; } if(timeout <= 0) { timeout = INFINITE; } ::WaitForSingleObject(m_handle, timeout);}void SFThread::Resume(){ if(NULL == m_handle || !m_bRun) { return; } ::ResumeThread(m_handle);}void SFThread::Suspend(){ if(NULL == m_handle || !m_bRun) { return; } ::SuspendThread(m_handle);}bool SFThread::Terminate(unsigned long ExitCode){ if(NULL == m_handle || !m_bRun) { return true; } if(::TerminateThread(m_handle, ExitCode)) { ::CloseHandle(m_handle); m_bRun = false;//設(shè)置線(xiàn)程的運(yùn)行狀態(tài)為假 return true; } return false;}unsigned int SFThread::GetThreadID(){ return m_ThreadID;}std::string SFThread::GetThreadName(){ return m_ThreadName;}void SFThread::SetThreadName(std::string ThreadName){ m_ThreadName = ThreadName;}void SFThread::SetThreadName(const char * ThreadName){ if(NULL == ThreadName) { m_ThreadName = ""; } else { m_ThreadName = ThreadName; }}unsigned int SFThread::StaticThreadFunc(void * arg){ SFThread * pThread = (SFThread *)arg; pThread->Run(); return 0;}

業(yè)務(wù)類(lèi) SFTimer.h

#ifndef SFTimer_H#define SFTimer_H#include<windows.h>#include"SFThread.h"#define WM_UPDATETIME WM_USER+101 //用戶(hù)消息,每秒發(fā)送一次。class SFTimer:public SFRunnable{ private: HWND hwnd; int Day; int Hour; int Minute; int Second; void init();//初始化天、小時(shí)、分鐘、秒全部為零 void CountDown();//倒計(jì)時(shí) void Time();//正計(jì)時(shí) public: SFTimer(); SFTimer(HWND hwnd); int getDay(); void setDay(int day); int getHour(); void setHour(int hour); int getMinute(); void setMinute(int minute); int getSecond(); void setSecond(int second); void Run(); void SendUploadTimeMessage();};#endif

SFTmier.cpp

#include "SFTimer.h"SFTimer::SFTimer(){ this->init();}SFTimer::SFTimer(HWND hwnd){ this->init(); this->hwnd = hwnd;}int SFTimer::getDay(){ return this->Day;}void SFTimer::setDay(int day){ this->Day = day;}int SFTimer::getHour(){ return this->Hour;}void SFTimer::setHour(int hour){ this->Hour = hour;}int SFTimer::getMinute(){ return this->Minute;}void SFTimer::setMinute(int minute){ this->Minute = minute;}int SFTimer::getSecond(){ return this->Second;}void SFTimer::setSecond(int second){ this->Second = second;}void SFTimer::SendUploadTimeMessage(){ PostMessage(this->hwnd,WM_UPDATETIME,this->Minute,this->Second);}void SFTimer::init(){ this->Day = 0; this->Hour = 0; this->Minute = 0; this->Second = 0;}void SFTimer::CountDown(){ for(;this->Day>=0;this->Day--)//天循環(huán) { for(;this->Hour>=0;this->Hour--)//小時(shí)循環(huán) { for(; this->Minute >=0; this->Minute--)//分鐘循環(huán) { for(; this->Second >=0; this->Second--)//秒循環(huán) { Sleep(1000);//Sleep看清楚間 this->SendUploadTimeMessage();//發(fā)送消息 } this->Second = 59; } } } }void SFTimer::Time(){ this->init();//初始化各個(gè)參數(shù) while(this->Minute<5)//5分鐘計(jì)時(shí) { this->Second+=1; if(this->Second > 60) { this->Second = 0; this->Minute += 1; if(this->Minute > 60) { this->Minute = 0; this->Hour += 1; if(this->Hour > 60) { this->Hour = 0; this->Day +=1; } } } this->SendUploadTimeMessage(); Sleep(1000); }}void SFTimer::Run(){ this->CountDown(); this->Time();}

測(cè)試代碼 testMain.cpp

#include <iostream>using namespace std;#include "SFTimer.h"#include "SFThread.h"int main(int argc, char *argv[]) { SFTimer* timer = new SFTimer();//具體業(yè)務(wù)類(lèi) timer->setDay(0);//設(shè)置天 timer->setHour(0);//設(shè)置小時(shí) timer->setMinute(2);//設(shè)置分鐘 timer->setSecond(0);//設(shè)置秒 SFThread* thread = new SFThread(timer);//線(xiàn)程類(lèi) thread->Start();//啟動(dòng)線(xiàn)程 while(1) { cout<<"計(jì)時(shí)開(kāi)始:"<<timer->getMinute()<<"分"<<timer->getSecond()<<"秒"<<endl; Sleep(1000);//Sleep看清楚間 system("cls"); } getchar(); return 0; }

實(shí)現(xiàn)效果

如下圖所示:實(shí)現(xiàn)2分鐘倒計(jì)時(shí),以及5分鐘正計(jì)時(shí)。 這里寫(xiě)圖片描述


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 免费日韩片 | 激情网站免费观看 | 国产精品69久久 | 中文字幕在线观看1 | 亚洲国产馆| 久久99国产精品免费网站 | 欧美激情性色生活片在线观看 | 成人免费网站在线观看视频 | 91福利社在线 | 黄污网站在线观看 | 国内精品免费一区二区2001 | 男人的天堂色偷偷 | 99精美视频| 国产99视频在线观看 | 免费观看黄色一级视频 | 国产精品99精品 | 黄色高清免费网站 | 久久久aa | 丰满年轻岳中文字幕一区二区 | 亚洲午夜久久久久 | 二区三区四区 | 亚洲91网站 | 欧美成人精品欧美一级 | 特色一级黄色片 | 夜夜看| 国产精品www | 国产91小视频在线观看 | 3级毛片 | 久久精品a一级国产免视看成人 | 奶子吧naiziba.cc免费午夜片在线观看 | 羞羞视频免费网站男男 | 狠狠干夜夜草 | 免费观看黄色影片 | 嗯~啊~用力~高h | 亚洲午夜影院在线观看 | 九九热精品视频在线免费观看 | 激情久久一区二区 | 成人福利在线视频 | 一级做人爱c黑人影片 | 国产精品久久久久久久成人午夜 | 最新中文字幕第一页视频 |