【问题标题】:ThreadPoolTimer not working线程池定时器不工作
【发布时间】:2016-01-08 16:44:34
【问题描述】:

我想编写定期执行的代码,所以一些搜索似乎表明ThreadPoolTimer 适合我的需要。这是我实现它的尝试:

MainPage::MainPage()
{
    // Timer code
    TimeSpan period;
    period.Duration = 100000000000; // 1 second
    ThreadPoolTimer::CreatePeriodicTimer(ref new TimerElapsedHandler(this, &MainPage::TestTimer), period);
}

// Dummy method to test timer
void MainPage::TestTimer(Windows::System::Threading::ThreadPoolTimer^ timer)
{
    OutputDebugString(L"Timer triggered\n");
}

我的期望是它每秒打印一次“计时器触发”。但是在我的情况下没有打印出来。为什么它不起作用?

【问题讨论】:

    标签: c++-cx uwp


    【解决方案1】:

    您的 TimeSpan 似乎不正确。我刚刚尝试了以下代码来生成 1 秒计时器。

    MainPage::MainPage()
    {
        InitializeComponent();
    
        TimeSpan period;
        period.Duration = 10000000; // 1 second
        ThreadPoolTimer::CreatePeriodicTimer(ref new TimerElapsedHandler(this, &MainPage::TestTimer), period);
    }
    
    void MainPage::TestTimer(Windows::System::Threading::ThreadPoolTimer^ timer)
    {
        OutputDebugString(L"Timer triggered\n");
    }
    

    我相信您的代码生成了一个 10000 秒的计时器。

    【讨论】:

    • 天哪!非常感谢。我如此盲目地关注documentation:它说这个时间量是使用 Windows::Foundation::TimeSpan 结构以滴答声(100 纳秒为单位)指定的。 我把 100,000,000,000 当作计数以纳秒为单位,而它应该是 1,000,000,000 / 100 = 10,000,000。
    • 是的,TimeSpan 是 100 纳秒单位的数量,即 10^-7 秒。所以你需要七个零才能得到一秒。
    • @PeterTorr-MSFT 为什么 C++/CX TimeSpan 对象使用 100 纳秒而不是更标准的毫秒?我想很多开发人员都会遇到这个问题
    • 它是各种 Windows API 使用的标准单位。 msdn.microsoft.com/en-us/library/windows/desktop/…
    猜你喜欢
    • 2011-10-18
    • 2018-05-16
    • 2018-01-20
    • 2020-06-12
    • 1970-01-01
    • 2011-05-12
    • 2014-01-19
    • 1970-01-01
    • 2013-06-05
    相关资源
    最近更新 更多