Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Raspberry + C++ + thread, не работает [РЕШЕНО]  (Прочитано 665 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vlad.V

  • Автор темы
  • Активист
  • *
  • Сообщений: 478
    • Просмотр профиля
Доброе время суток! Сломал мозг, не могу понять чего не обрабатывает tread? Точнее он работает, но не так как хотелось бы, ниже запостил простую программку, которую пытаюсь запустить. Может кто-то объяснить по какой причине не работает thread.detach, зато thread.join идеально отрабатывает??
Спасибо!

make
SOURCE=main.o test.o

CC=g++-4.9
COPTIONS=-std=c++11 -Wall -Winline -O3

test: $(SOURCE)
$(CC) $(COPTIONS) -o $@ $^ -lpthread

.cpp.o:
$(CC) $(COPTIONS) -c -o $@ $<

clean:
rm -fv $(SOURCE)


test.hpp
#include <iostream>
#include <string>
#include <thread>

using std::string;

void test(const int, const int, const string &);


main.cpp
#include "test.hpp"

int main(void)
{
  int a(10);
  int b(20);
  string c{"TEST"};
  std::cout << "tread join \n";
  std::thread (test, a, b, c).join();
 
  std::cout << "tread detach \n";
  a = 20;
  c = "HELLO";
  std::thread (test, a, b, c).detach();
  return int();
}

test.cpp
#include "test.hpp"


void test(const int a, const int b, const string &c)
{
  std::cout << "a = " << a << ", b = " << b << ", c = " << c << std::endl;
}

Компиляция проходит без ошибок, первый вызов thread выводит инфу на экран, второй - ничего не делает. :idiot2: Второй день бьюсь.

PS: -std=c++0x - не помогает.
« Последнее редактирование: 06 Март 2015, 19:33:38 от Vlad.V »

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 750
    • Просмотр профиля
Re: Raspberry + C++ + thread, не работает
« Ответ #1 : 06 Март 2015, 14:44:03 »
Может быть потому, что после вызова detach() поток не успевает запуститься, а ты уже в основном делаешь return?

Оффлайн Vlad.V

  • Автор темы
  • Активист
  • *
  • Сообщений: 478
    • Просмотр профиля
Re: Raspberry + C++ + thread, не работает
« Ответ #2 : 06 Март 2015, 14:46:19 »
т.е. нужно таймаут сделать?

Пользователь решил продолжить мысль 06 Март 2015, 15:41:50:
капец! Работает, спасибо добрый человек!!
« Последнее редактирование: 06 Март 2015, 15:41:50 от Vlad.V »

Оффлайн maza51

  • Любитель
  • *
  • Сообщений: 79
    • Просмотр профиля
Re: Raspberry + C++ + thread, не работает [РЕШЕНО]
« Ответ #3 : 08 Март 2015, 09:47:20 »
Ты для чего запускаешь потоки?
Если хочешь что бы они отдельно друг от друга работали, то не делай join.

std::thread thread1(test, a, b, c);
std::thread thread2(test, a, b, c);

join вызывается тогда, когда хочешь чтобы функция начала работать синхронно.

Оффлайн Vlad.V

  • Автор темы
  • Активист
  • *
  • Сообщений: 478
    • Просмотр профиля
Re: Raspberry + C++ + thread, не работает [РЕШЕНО]
« Ответ #4 : 08 Март 2015, 12:24:06 »
Мне вообще нужен был detach, но так как он не запускался, решил проверить join. А вообще отказался от thread в пользу fork. Очень уж thread "нежный", поток не успевает открыть, работает только пока основная программа работает, fork тут выигрывает как по мне. Хотя конечно, смотря какие стоят задачи.

 

Страница сгенерирована за 0.081 секунд. Запросов: 25.