c++ thread передача enum

197
02 апреля 2017, 04:49

Вот кусок кода, хочу его запустить отдельным потоком

if (keyLength == 1024)
            rsa.generateKeys(RSA::RSA_1024);
        else if (keyLength == 2048)
            rsa.generateKeys(RSA::RSA_2048);

Ну вот написал так:

if (keyLength == 1024)
            std::thread(rsa.generateKeys, RSA::RSA_1024).join();
        else if (keyLength == 2048)
            std::thread(rsa.generateKeys, RSA::RSA_2048).join();

Пытаюсь скомпилить, нифига не выходит. Вылезает куча ошибок:

Прототип функции:

enum KeyLength {RSA_1024 = 512, RSA_2048 = 1024};
void generateKeys(KeyLength keyLength = RSA_2048);

UPDATE:

if (keyLength == 1024)
            std::thread(&RSA::generateKeys, &rsa, RSA::RSA_1024).join();
        else if (keyLength == 2048)
            std::thread(&RSA::generateKeys, &rsa, RSA::RSA_2048).join();

Вроде заработало

Answer 1

При передаче указателя на нестатическую функцию-член, нужно вторым аргументом передавать указатель на класс, членом которого она является, в данном случае, this. Это относится к большинству функций std, которым можно передать функциональный объект в качестве аргумента (обычно в таких случаях аргументы интерпретируются как в std::bind).

READ ALSO
Длительность аудио-файла Qt 5.7 QMediaPlayer

Длительность аудио-файла Qt 5.7 QMediaPlayer

Здравствуйте! Как получить длительность музыки в QMediaPlayer? Я сделал всё, что в моих силахduration возвращает всегда 0

246
Как заменить символ в указателе на строку char*?

Как заменить символ в указателе на строку char*?

Хочу сделать изменение любого выбранного символа в массиве через указатели

211
Программное оформление html кода

Программное оформление html кода

Программно получаю строки (c++, std::string) с неоформленным html кодом, можно ли как-то строки программно обрабатывать и придавать html коду оформление,...

228