2014-09-02 5 views
-2

Я пытаюсь понять класс, который является частью уступки, мы должны делать, но я не понимаю, некоторые из синтаксиса:Что означает Thread :: yield() в этом контексте?

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

Что Thread :: доходность(); имею в виду? Какой поток? В коде для этого объекта Thread нет объявления. Что :: ?

+3

нужно больше контекста ... Что 'Thread'? Какой-то класс в одной из многочисленных библиотек потоков C++? Ваш собственный доморощенный класс? –

+2

Проверьте документы ... – nullpotent

+0

В этом контексте 'X :: Y()' означает, что вызывается статический метод с именем 'Y' типа' X'. Итак, следующий шаг - перейти к определению «Y» и посмотреть, что он делает. – Jon

ответ

0

Возможно, это означает, что функции вы смотрите на это происходит от Thread и sleep это просто делегируя ответственность за «спать» статические yield функции родительского класса. НО, нам действительно нужно увидеть больше, прежде чем мы сможем сказать наверняка.

0

Таким образом, в основном :: означает, что вы вызываете метод статического класса в классе Thread (обратите внимание, что вам не нужно было создавать экземпляр класса Thread для вызова этого метода).

Операция yield вызывает поток, который вызвал метод sleep, чтобы выполнить выполнение для других ожидающих потоков. В основном, этот поток приостановлен, и другим ожидающим потокам разрешено работать. ОС перенастраивает спальный поток для запуска в будущем, основываясь на приоритете потоков и состоянии других потоков.

2

Вызов

Thread::yield(); 

означает вызов метода с именем выход, который заключен в Thread класса или имен (это может быть метод глобального просто заключен в пространстве имен). Название доход предлагает it is a call made to give up the CPU cycles and enable other threads running. Поиск в вашем проекте для Тема, и вы найдете то, что именно. Метод с именем доход должен присутствовать в классе Thread или пространстве имен.

Что такое ::?

:: является оператором разрешения Объем

С ++ Стандартный 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 
} 

-end пример]

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

Смежные вопросы