Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > как передать в треад ссылку на std::map


Автор: box 21.9.2013, 20:53
всем привет !
собственно по сабжу, приведите пожалуйста пример передачи ссылки на стд мап в треад с последующей передачей  из треада в функцию         

Автор: box 21.9.2013, 22:57
пытаюсь так :
Код

map<std::string, uint64_t> mymap_temp_syn;
 typedef struct _configuration Configuration;
 struct _configuration {
   int id;
   std::map<string, uint64_t>& map_syn;
 };
..........
//в треаде

Configuration *conf = (Configuration *) ptr;
std::map<string, uint64_t> map_syn = (std::map<string, uint64_t>)conf[0].map_syn;
..........
//в main()
Configuration conf[1] = {{0, mymap_temp_syn}};
thread1Create = pthread_create(&thread1, NULL, &pthread_Message, (void*)conf);



что не так ?

Автор: akizelokro 22.9.2013, 11:34
Код

std::map<string, uint64_t>& map_syn;


Что ты хочешь сказать этой строкой в определении struct _configuration ?
Зачем здесь &?

Добавлено @ 11:49
При последующемрассмотрении того, что написал дополнительно, понял, что дополнительно ещё ту глупостьнаписал. И потёр.
Это хорошо, что я не выпендриваюсь и самокритично отношусь к тому, что порой "сказану".
И эта..
"учиться никому не поздно"!

Автор: box 22.9.2013, 13:57
кто нибудь по существу скажет что нибудь ?
убрал & ситуация не изменилась , при компиляции такие ошибки : 

bridge.cpp:781:21: error: no matching function for call to 'pthread_create'
    thread1Create = pthread_create(&thread1, NULL, &pthread_Message, (void*)conf);
                    ^~~~~~~~~~~~~~
/usr/include/pthread.h:197:6: note: candidate function not viable: no known conversion from 'void *(*)(void *, std::map<string, uint64_t> &)' to 'void *(*)(void *)' for 3rd argument
int             pthread_create(pthread_t *, const pthread_attr_t *,

Автор: akizelokro 22.9.2013, 14:12
Цитата(box @  22.9.2013,  13:57 Найти цитируемый пост)
/usr/include/pthread.h:197:6: note: candidate function not viable: no known conversion from 'void *(*)(void *, std::map<string, uint64_t> &)' to 'void *(*)(void *)' for 3rd argument


Здесь у тебя ошибка на третьем параметре, придётся тебе и определение функции pthread_Message смотреть.
Судя по сообщению компилятора, ты берёшь указатель на функцию, принимающую два параметра. 

http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

Автор: box 22.9.2013, 18:02
спасибо, разобрался !

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)