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


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

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

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

  • Активист
  • *
  • Сообщений: 754
    • Просмотр профиля
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.034 секунд. Запросов: 25.