Как функцию загнать в отдельный поток

В Qt программирую недавно и столкнулся с такой проблемой — есть две функции в консольном приложении, которые надо вызвать, и чтобы они работали в фоне( параллельно), а как вызвать в отдельный поток, нигде не могу найти. Хотелось бы без использования классов. Спасибо.
Годятся ссылки на учебники и готовые примеры. В гугл не посылать — там много чего написано, но в основном про классы.

Используй std::thread из C++11. Или boost::thread.

#include <iostream>
#include <thread>

void do_stuff()
{
    std::cout << "doing something...\n";
}

int main()
{
    std::thread t1(do_stuff);
    do_stuff();
    t1.join();
    return 0;
}

Компилировать с поддержкой многопоточности:

c++ -std=c++11 -pthread file.cpp

А не подскажите, где можно почитать про потоки в Qt. Сколько литературы находил, там везде начинается — создадим класс, а про простые функции ни слова. Хотелось бы знать, как отдельные потоки работают с переменными: местными и глобальными.

как только добавляю строку в файл cam.pro

    QT       += core
QT       -= gui

TARGET = cam4
CONFIG   += console
CONFIG   -= app_bundle
# Добавляю вот эту строку
CONFIG   c++ -std=c++11 -thread fale.cpp

TEMPLATE = app
SOURCES += main.cpp
INCLUDEPATH+=D:\\ASS\\OpenCV\\Opencv_Qt\\install\\include
INCLUDEPATH+=D:\\ASS\\OpenCV\\Opencv_Qt\\install\\include\\opencv
LIBS+=D:\\ASS\\OpenCV\\Opencv_Qt\\lib\\libopencv_core249d.dll.a
LIBS+=D:\\ASS\\OpenCV\\Opencv_Qt\\lib\\libopencv_imgproc249d.dll.a
LIBS+=D:\\ASS\\OpenCV\\Opencv_Qt\\lib\\libopencv_highgui249d.dll.a
HEADERS +=
OTHER_FILES +=

так сразу получаю ошибку : [Makefile] Error 3
помогите разобраться

Какие ошибки? А вообще, по-моему так нельзя... Попробуйте откомпилировать вручную.

Переписал вот так`
QT += core
QT -= gui

TARGET = cam4
CONFIG += console -pthread
CONFIG -= app_bundle -std=c++11 -std=gnu`

получаю ошибку при подключении библиотеки #include <thread>

ошибка: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.

Насколько я понимаю, это значит, что нужно включить поддержку c++11. Можно сделать это так:

CONFIG += c++11

Или так:

QMAKE_CXXFLAGS += -std=c++11

( накопал в интеренете, так что не стесняемся пользоваться поисковиками ).
Правда на моей машине это не работает, компилируется, но не хочет запускаться:

terminate called after throwing an instance of 'std::system_error'
  what():  Enable multithreading to use std::thread: Operation not permitted
Аварийный останов (сделан дамп памяти)

Всё! Совсем завяз, уже создал пустой проект, чтобы разобраться с этими потоками. Гугл уже снится, но там, похоже, у всех всё работает, а у меня нет. Вот проект упрощен до минимума.
файл.pro

    QT       += core
QT       -= gui

TARGET = Probka
CONFIG   += console
CONFIG   += c++ -std=c++11 -pthread file.cpp

TEMPLATE = app
SOURCES += main.cpp

файл.срр
    #include <QCoreApplication>
#include <iostream>
#include <thread>

void do_stuff()
{
   //std::cout << "doing something...\n";
    return 0;
}

int main()
{/*/
    std::thread t1(do_stuff);
    do_stuff();
    t1.join();//*/
    return 0;
}

Но от ошибки так и не могу избавиться, уже ткните носом — в чем моя ошибка?
#error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
#error This file requires compiler and library support for the \
^

Всё! Совсем завяз, уже создал пустой проект, чтобы разобраться с этими потоками. Гугл уже снится, но там, похоже, у всех всё работает, а у меня нет. Вот проект упрощен до минимума.
файл.pro

    QT       += core
QT       -= gui

TARGET = Probka
CONFIG   += console
CONFIG   += c++ -std=c++11 -pthread file.cpp

TEMPLATE = app
SOURCES += main.cpp

файл.срр

    #include <QCoreApplication>
#include <iostream>
#include <thread>

void do_stuff()
{
   //std::cout << "doing something...\n";
}

int main()
{/*/
    std::thread t1(do_stuff);
    do_stuff();
    t1.join();//*/
    return 0;

}

Но от ошибки так и не могу избавиться, уже ткните носом — в чем моя ошибка?
#error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
#error This file requires compiler and library support for the \
^

CONFIG += c++ -std=c++11 -pthread file.cpp

Я же сказал вам, что поддержка c++11 включается так:

CONFIG += c++11

То есть ваш .pro-файл будет выглядеть так:

QT += core
QT -= gui

TARGET = Probka
CONFIG += console
CONFIG += c++11

TEMPLATE = app
SOURCES += main.cpp

Так же нужно добавить, чтобы всё заработало:

LIBS += -pthread

В итоге, в .pro-файл нужно добавлять:

CONFIG += c++11
LIBS += -pthread

Я так пробовал, таже ошибка.
Праканала вот такая конструкция.
QMAKE_CXXFLAFS += -std=c++ -pthread

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.