2014-09-02 87 views
-2

我想了解的一类,这是我们必须做的任务的一部分,但我不明白的一些语法:在这种情况下Thread :: yield()是什么意思?

void sleep() 
    { 
     Thread::yield(); 
    } // implicit unlock() 

什么螺纹::收益率();意思?那是哪个线程?此线程对象的代码中没有声明。什么是 :: ?

+3

需要更多的背景下...什么是'Thread'?大量C++线程库中的某一个类?你自己的本土课程? – 2014-09-02 22:43:27

+2

检查文档... – nullpotent 2014-09-02 22:43:39

+0

在这种情况下,'X :: Y()'表示调用类型为'X'的静态方法'Y'。所以接下来的步骤是去定义'Y'并看看它的功能。 – Jon 2014-09-02 22:44:10

回答

0

也许这意味着您正在查看的功能来自Threadsleep仅仅是将“睡眠”的责任委派给父类的静态yield函数。但是,我们确实需要看到更多,然后才能肯定地说。

0

所以基本上::意味着你正在调用Thread类的静态类方法(注意你不必创建一个Thread类的实例来调用该方法)。

yield操作会导致调用sleep方法的线程将执行权交给其他等待线程。基本上该线程已暂停,并允许其他等待线程运行。 OS会根据线程的优先级和其他线程的状态重新安排将来运行的睡眠线程。

2

的调用

Thread::yield(); 

指名为收率被封装在Thread类或命名空间方法的调用(它可以只是封装在命名空间全局方法)。名称产量建议it is a call made to give up the CPU cycles and enable other threads running。 在您的项目中搜索主题,你会发现它确切的。方法名为yield应存在于Thread类或名称空间内。

什么是::?

::是范围解析操作者

C++标准n3337 §3.4.3合格名字查找

类或空间成员或枚举的名称可被称为 以::范围解析运算符(5.1)应用于 嵌套名称说明符(表示其类,名称空间或枚举)。如果 嵌套名称说明符中的::范围解析运算符未位于decltype说明符的前面,则在该名称前面的名称的查找 仅考虑名称空间,类型和专门类型为模板的模板。如果找到的名称不是 指定了名称空间或类,枚举或从属类型,则 程序格式不正确。[示例:

class A { 
public: 
    static int n; 
}; 

int main() { 
    int A; 
    A::n = 42; // OK 
    A b; // ill-formed: A does not name a type 
} 

末端示例]

https://stackoverflow.com/a/9338301/1141471