C++ std::this_thread::get_id()vs passing id

C++ std::this_thread::get_id()vs passing id,c++,c++11,C++,C++11,这两种代码之间有什么区别? 最好/最快的方法是什么。 尝试制作自己的WM_计时器线程 第1个:timerThreadProc 使用get_id() 第二:timerThreadProc 没有get_id() 第一个例子使用C++库中的设备来确定当前运行的线程是 HMDEM1线程> /Cuth>线程,还是 HimTime2Tox< /COD>线程。 第二个示例通过将其参数与预定义的常量进行比较来执行可比较的任务,这些常量可能引用相同的两个线程 正如你所总结的,这几乎是;但是这里没有提到的是,第二种

这两种代码之间有什么区别? 最好/最快的方法是什么。 尝试制作自己的WM_计时器线程

第1个:timerThreadProc

使用get_id()

第二:timerThreadProc

没有get_id()


第一个例子使用C++库中的设备来确定当前运行的线程是<代码> HMDEM1线程> /Cuth>线程,还是<代码> HimTime2Tox< /COD>线程。 第二个示例通过将其参数与预定义的常量进行比较来执行可比较的任务,这些常量可能引用相同的两个线程

正如你所总结的,这几乎是;但是这里没有提到的是,第二种方法还必须在所示代码之外提供某种额外的支持,以跟踪执行线程所表示的内容,并将其映射到两个预定义常量之一。根据所示的实现,您必须假定这一点

因此,在这里不可能确定“最佳/最快”的方式

什么是“最快”,很大程度上取决于C++库实现的内部细节。例如,对于

此线程
或某个任意线程,是内联的
get\u id()
,以及它的效率。与之相比,第二个示例中使用的额外带外方法的效率更高

什么是“最好的”还取决于应用程序的其余部分。根据应用程序需求和行为的细节,第一种方法可能会稍微好一点。第二种方法也可能会稍微好一点

但是,更可能的是,考虑到现代的、快速的CPU和现代的、智能的、优化的编译器,这两种方式都不会产生可测量的差异,而这仅仅取决于整个代码的风格和可维护性

这意味着你自己将是回答这个问题的最佳人选,因为你比stackoverflow.com上的任何人都更了解这个特定的应用程序

DWORD WINAPI timerThreadProc(DWORD dwMilliseconds)
{
    while (!bExit)
    {
        if (std::this_thread::get_id() == hTimer1Thread.get_id())
        {
            // do what ever
            Beep(10000, 100);
        }

        if (std::this_thread::get_id() == hTimer2Thread.get_id())
        {
            // do what ever
            Beep(1000, 100);
        }

        Sleep(dwMilliseconds);
    }
    return 1;
}
#define TIMER1 1
#define TIMER2 2
DWORD WINAPI timerThreadProc(UINT ID, DWORD dwMilliseconds)
{
    while (!bExit)
    {
        if (ID == TIMER1)
        {
            // do what ever
            Beep(10000, 100);
        }

        if (ID == TIMER2)
        {
            // do what ever
            Beep(1000, 100);
        }

        Sleep(dwMilliseconds);
    }
    return 1;
}