|
Вызов функции класса из потока.
|
|||
---|---|---|---|
#18+
Имеем класс вида Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Хотим вызвать f1 из потока Код: plaintext 1. 2. 3. 4.
Пишет ошибку -"отсутствуют экземпляры конструктора "std::thread::thread", соответствующие списку аргументов". Пока нет потока все работает. Пробовал создать указатель на функцию A->a и через указатель уйти в поток, обмануть типа. По синтаксису в норме, но вылезает много ошибок при компиляции. Как запихнуть подобную A->f1 функцию в поток? "Есть многое на свете, друг Горацио, что и не сразу в голову придет." М. Твен "Приключения Геккельбери Финна" ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2020, 03:03 |
|
Вызов функции класса из потока.
|
|||
---|---|---|---|
#18+
Это не "функция класса", а метод объекта и без указания самого объекта его вызвать нельзя. Делай отдельную функцию или static метод и передавай туда указатель или ссылку на объект. Примеры можешь тут посмотреть http://www.cplusplus.com/reference/thread/thread/thread/ ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2020, 07:13 |
|
Вызов функции класса из потока.
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2.
Ну и естественно вам надо гарантировать что объект будет существовать пока поток с ним работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2020, 13:33 |
|
Вызов функции класса из потока.
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Код: plaintext 1. 2.
Ну и естественно вам надо гарантировать что объект будет существовать пока поток с ним работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2020, 21:32 |
|
Вызов функции класса из потока.
|
|||
---|---|---|---|
#18+
YUBA, Кстати, я забыл что конструктор std::thread умеет сам делать bind. Так что еще проще: Код: plaintext 1.
(Но внутри оно делает то же самое что std::bind) ЗЫ. std::bind это просто обертка которая применяет к первому аргументу (функции) все остальные (параметры) и возвращает новую функцию с меньшим числом аргументов (например 0 как здесь). В данном частном случае также работает правило, что в случае если функция - это указатель на функцию-член класса (на метод), то вторым аргументом надо передать ссылку или указатель на экземпляр этого класса, а следующими аргументами уже параметры этого метода. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2020, 21:43 |
|
Вызов функции класса из потока.
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky, да, уже умеет. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2020, 22:15 |
|
Вызов функции класса из потока.
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Код: plaintext 1. 2.
Код: plaintext 1.
для слабаков, нужно больше обёрток! Предлагаю Код: plaintext 1.
т.к. бох троицу любит. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2020, 22:41 |
|
|
start [/forum/topic.php?fid=57&msg=39922586&tid=2017481]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 143ms |
0 / 0 |