Win10系列:VC++ 定时器
計(jì)時(shí)器機(jī)制俗稱"心跳",表示以特定的頻率持續(xù)觸發(fā)特定事件和執(zhí)行特定程序的機(jī)制。在開發(fā)Windows應(yīng)用商店應(yīng)用的過程中,可以使用定義在Windows::UI::Xaml命名空間中的DispatcherTimer類來創(chuàng)建計(jì)時(shí)器。DispatcherTimer類包含了如下的成員:
- Tick事件,周期性觸發(fā)的事件。
- Start函數(shù),用于啟動(dòng)計(jì)時(shí)器。
- Stop函數(shù),用于停止計(jì)時(shí)器。
- Interval屬性,設(shè)置觸發(fā)Tick事件的時(shí)間周期,此屬性值的類型為TimeSpan。
簡單介紹了DispatcherTimer類之后,接下來模擬實(shí)現(xiàn)一個(gè)簡易的計(jì)時(shí)器。在Visual Staudio 2012中新建一個(gè)Visual C++的Windows應(yīng)用商店的空白應(yīng)用程序項(xiàng)目,并命名為DispatcherTimerDemo,接著在MainPage.xaml文件的Grid元素中添加如下的代碼,用于布局前臺界面。
<StackPanel HorizontalAlignment="Center" Margin="50,300,0,0">
<TextBlock x:Name="ClockText" FontSize="24"></TextBlock>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button x:Name="Start" Click="StartClick" Content="開始" Grid.Column="0"></Button>
<Button x:Name="Stop" Click="StopClick" Content="停止" Grid.Column="1"></Button>
</Grid>
</StackPanel>
在上面的代碼中,添加了一個(gè)TextBlock控件和兩個(gè)按鈕。將這個(gè)TextBlock控件命名為ClockText,用來顯示計(jì)時(shí)器的計(jì)時(shí)。兩個(gè)按鈕分別為"開始"按鈕和"停止"按鈕,其中"開始"按鈕用來啟動(dòng)計(jì)時(shí)器,"停止"按鈕用來停止計(jì)時(shí)器。
布局了前臺界面以后,接下來添加計(jì)時(shí)器的后臺實(shí)現(xiàn)代碼。打開MainPage.xaml.h頭文件,添加如下的代碼:
private:
????//聲明DispatcherTimer類型變量timer
????Windows::UI::Xaml::DispatcherTimer^ timer;
????//聲明TimeSpan類型變量timeSpan
????Windows::Foundation::TimeSpan timeSpan;
????//聲明int32類型變量
????int32 highNum;
????//聲明int32類型變量
????int32 lowNum;
在上面的代碼中,使用private關(guān)鍵字聲明了四個(gè)私有的成員變量,分別為timer、timeSpan、highNum和lowNum,其中timer是一個(gè)DispatcherTimer類型的變量,用來表示計(jì)時(shí)器,timeSpan為TimeSpan類型的變量,用來表示時(shí)間。highNum和lowNum都為int32類型的變量,分別代表計(jì)時(shí)器的十位數(shù)和個(gè)位數(shù)。
聲明了上述的變量之后,接下來打開MainPage.xaml.cpp源文件,并在構(gòu)造函數(shù)中添加如下的代碼:
MainPage::MainPage()
{
????InitializeComponent();
????//創(chuàng)建DispatcherTimer類的對象
????timer=ref new DispatcherTimer();
????//為Tick事件添加事件函數(shù)
????timer->Tick +=ref new EventHandler<Object^>(this,&DispatcherTimerDemo::MainPage::DispatcherTimerTick);
????// Duration屬性記錄的時(shí)間為1s
????timeSpan.Duration=10000000;
????//設(shè)置時(shí)間間隔
????timer->Interval=timeSpan;
????//highNum變量賦值0
????highNum=0;
????//lowNum變量賦值0
????lowNum=0;
}
在上面的代碼中,初始化一個(gè)DispatcherTimer類的對象timer,并為timer對象的Tick事件添加事件處理函數(shù)DispatcherTimerTick,后面將介紹DispatcherTimerTick函數(shù)的具體實(shí)現(xiàn)代碼。然后把timeSpan變量的Duration屬性賦值為10000000,并將timeSpan變量賦值給timer對象的Interval屬性,使timer對象的Tick事件每1秒觸發(fā)一次。最后將highNum變量和lowNum變量分別賦值為0,用于表示計(jì)時(shí)器的起始時(shí)間。
在實(shí)現(xiàn)DispatcherTimerTick函數(shù)之前,首先需要在MainPage.xaml.h頭文件中進(jìn)行聲明,代碼如下所示:
public:
????//更新計(jì)時(shí)器計(jì)時(shí)
????void DispatcherTimerTick(Object^ sender, Object^ e);
在上述代碼中,使用public關(guān)鍵字聲明一個(gè)公有的DispatcherTimerTick函數(shù),此函數(shù)用來更新計(jì)時(shí)器的計(jì)時(shí),并將更新后的計(jì)時(shí)顯示到前臺界面中。
聲明了DispatcherTimerTick函數(shù)以后,接下來在MainPage.xaml.cpp源文件中添加DispatcherTimerTick函數(shù)的實(shí)現(xiàn)代碼,具體代碼如下所示:
//更新計(jì)時(shí)器計(jì)時(shí)
void DispatcherTimerDemo::MainPage::DispatcherTimerTick(Object^ sender, Object^ e)
{
????//當(dāng)lowNum小于9時(shí),lowNum增1
????if(lowNum<9)
????{
????????lowNum++;
????}
????else
????{
????????//當(dāng)lowNum大于9時(shí),將lowNum設(shè)為0
????????lowNum=0;
????????//highNum小于9時(shí),highNum增1
????????if(highNum<9)
????????{
????????????highNum++;
????????}
????????else
????????{
????????????//highNum大于9時(shí),將highNum設(shè)為0
????????????highNum=0;
????????}
????}
????//將計(jì)時(shí)顯示到TextBlock控件中
????ClockText->Text="開始計(jì)時(shí):"+highNum+lowNum;
}
在上面的代碼中,當(dāng)lowNum變量的值小于9時(shí),lowNum變量自增1。而當(dāng)lowNum變量的值大于9時(shí),將lowNum變量賦值為0,并設(shè)置highNum變量的值。同樣,當(dāng)highNum變量的值小于9時(shí),highNum變量自增1。而當(dāng)highNum變量大于9時(shí),將highNum變量賦值為0。最后將highNum變量和lowNum變量賦值給名為"ClockText"的TextBlock控件的Text屬性,用于將計(jì)時(shí)顯示到前臺界面中。
添加了DispatcherTimerTick函數(shù)的實(shí)現(xiàn)代碼后,接下來為"開始"按鈕添加單擊事件處理函數(shù)StartClick。在MainPage.xaml.h頭文件中添加如下的代碼,用來聲明StartClick函數(shù)。
public:
????//啟動(dòng)計(jì)時(shí)器
????void StartClick(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
聲明了StartClick函數(shù)之后,接下來在MainPage.xaml.cpp源文件中添加StartClick函數(shù)的實(shí)現(xiàn)代碼,在此函數(shù)中調(diào)用timer對象的Start函數(shù)來啟動(dòng)計(jì)時(shí)器。具體代碼如下所示:
//啟動(dòng)計(jì)時(shí)器
void DispatcherTimerDemo::MainPage::StartClick(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
????timer->Start();
}
接著給"停止"按鈕添加單擊事件處理函數(shù)StopClick,在MainPage.xaml.h頭文件中添加如下的代碼,用來聲明StopClick函數(shù)。
public:
????//停止計(jì)時(shí)器
????void StopClick(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
聲明了StopClick函數(shù)之后,接下來在MainPage.xaml.cpp源文件中添加StopClick函數(shù)的實(shí)現(xiàn)代碼,在此函數(shù)中調(diào)用timer對象的Stop函數(shù)來停止計(jì)時(shí)器。具體代碼如下所示:
//停止計(jì)時(shí)器
void DispatcherTimerDemo::MainPage::StopClick(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
????timer->Stop();
}
運(yùn)行DispatcherTimerDemo項(xiàng)目后,單擊"開始"按鈕啟動(dòng)計(jì)時(shí)器,顯示如圖20-1所示的計(jì)時(shí)器界面。
圖20-1 計(jì)時(shí)器
總結(jié)
以上是生活随笔為你收集整理的Win10系列:VC++ 定时器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: append生成新变量的时候,没有如预期
- 下一篇: VS中C++ 项目重命名