Декларация потока в C ++ - PullRequest
0 голосов
/ 31 января 2020

Я просматривал код проекта в C. Там я увидел объявление потока:

pthread_t ui_thread = (pthread_t) 0;

Я не понял часть, начинающуюся с оператора '='. Что это такое и как я могу написать ту же декларацию в C ++.

Ответы [ 2 ]

1 голос
/ 31 января 2020

(pthread_t) 0 преобразует буквенное целое значение 0 в дескриптор потока pthread_t. Это предполагает, что такое преобразование возможно и допустимо, и что это значимое значение (вероятно, ожидается, что оно «без потока»).

Оператор full создает переменную ui_thread, которая является дескриптором потока типа pthread_t и инициализирует его этим значением.

В C ++ вы, вероятно, могли бы написать то же самое, если бы находились на платформе, где оно действовало для C. Однако лучше использовать библиотеку потоков C ++.

std::thread t;

создаст созданный по умолчанию дескриптор потока без ассоциированного потока, что, вероятно, эквивалентно приведенному выше.

0 голосов
/ 31 января 2020

Часть (pthread_t) известна как type casting в C. Также называется explicit type conversion. Это просто способ для программиста сообщить компилятору, что программист подразумевает, что значение (0 в данном случае) должно рассматриваться как тип pthread_t.

Ваш код по-прежнему действителен C ++.

В C ++ 11 вы, вероятно, можете просто сделать это:

pthread_t ui_thread{nullptr};
...