Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 06.07.2008
Сообщений: 32
1

Как правильно вызвать поток в консольной программе

01.11.2014, 15:20. Показов 2512. Ответов 24
Метки нет (Все метки)

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

файл.pro

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
QT += core
QT -= gui
 
TARGET = Probka
 
CONFIG += console
CONFIG += c++ -std=c++11 -pthread file.cpp
 
TEMPLATE = app
 
SOURCES += main.cpp
файл.срр

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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;
}
Но от ошибки так и не могу избавиться, уже ткните носом - в чем моя ошибка?
C
1
#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.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2014, 15:20
Ответы с готовыми решениями:

Правильно вызвать поток
Вызываю поток следующим образом repeat for Thread3:=0 to form3.sSpinEdit1.Value do begin ...

Как на VC ++ в консольной программе узнать ...
Как на VC ++ в консольной программе узнать, существует ли такая - то папка (или файл)?

Как работать с реестром в консольной программе?
как работать с реестром в консольное программе с http ини файлами и прочем?

Как подключить dll к консольной программе в Dev-CPP ?
Здравствуйте. Написал библиотеку в Qt Creator. Подключаю её к консольной программе, написанной в...

24
шКодер самоучка
2280 / 1956 / 945
Регистрация: 09.10.2013
Сообщений: 4,350
Записей в блоге: 7
01.11.2014, 15:37 2
Лучший ответ Сообщение было отмечено Димитрий как решение

Решение

Димитрий, Вы не в ту строку добавляете параметры компилятора
Bash
1
2
3
4
5
6
7
8
9
10
11
12
QT += core
QT -= gui
 
QMAKE_CXXFLAGS += -std=c++11 -pthread
 
TARGET = Probka
CONFIG += console
#CONFIG += c++ -std=c++11 -pthread file.cpp
 
TEMPLATE = app
 
SOURCES += main.cpp
1
0 / 0 / 0
Регистрация: 06.07.2008
Сообщений: 32
01.11.2014, 16:34  [ТС] 3
Спасибо, надо было раньше обратиться за помощью, всё равно информации, как правильно настроить компилятор для многопоточных приложений почти нет.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
01.11.2014, 17:29 4
Димитрий, потому что нет понятия настройка компилятора для монгопоточных приложений.
0
0 / 0 / 0
Регистрация: 06.07.2008
Сообщений: 32
02.11.2014, 10:58  [ТС] 5
Да, вообще - по настройке компилятора почти вся инфа для особо продвинутых, для навичков - минимум.
0
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
02.11.2014, 11:09 6
Цитата Сообщение от Димитрий Посмотреть сообщение
по настройке компилятора
А что вы там настраивать собрались? Он и из коробки нормально работает.
0
232 / 232 / 69
Регистрация: 30.09.2012
Сообщений: 545
02.11.2014, 11:19 7
В про файле для поддержки с++11 хватает просто

C++ (Qt)
1
CONFIG += c++11
разве нет?
0
0 / 0 / 0
Регистрация: 06.07.2008
Сообщений: 32
04.11.2014, 13:36  [ТС] 8
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Сообщение от Димитрий
по настройке компилятора
А что вы там настраивать собрались? Он и из коробки нормально работает.
А библиотеки вы где подключать собираетесь (пути к либам)? А как в моём случае многопоточность? Знаете, сколько пришлось перелапатить, чтобы понять, что надо добавить что-то в про-файл. И ни в одном учебнике ни строчки, просто дабавьте через инклуде заголовочный файл и работайте, а что кампилятор настроить надо ...

Цитата Сообщение от Chernobyl Посмотреть сообщение
В про файле для поддержки с++11 хватает просто
Код C++ (QT)
1
CONFIG += c++11
разве нет?
Нет, иначе бы не спрашивал тут: как и что.
0
8 / 6 / 1
Регистрация: 15.12.2011
Сообщений: 59
04.11.2014, 15:13 9
Версия Qt какая?
Если 5, то надо:
C++
1
CONFIG += c++11
если 4, то:
C++
1
QMAKE_CXXFLAGS += -std=c++11
Кроме того, зачем вы пишете на Qt, если собираетесь использовать потоки C++ 11? Рекомендую или все писать на C++ 11, или использовать средства многопоточности Qt.
0
0 / 0 / 0
Регистрация: 06.07.2008
Сообщений: 32
04.11.2014, 15:42  [ТС] 10
Цитата Сообщение от UndeadBlow Посмотреть сообщение
Рекомендую или все писать на C++ 11, или использовать средства многопоточности Qt.
Программировал в борланде С++6, чтобы писать кросплатформенные программки и использовать библиотеку Opencv, решил перейти на Qt. Пытаюсь освоить уже с месяц. Обьясните поподробней вашу рекомендацию. Как можно использовать многопоточность средствами С++, не используя средства Qt ?
0
8 / 6 / 1
Регистрация: 15.12.2011
Сообщений: 59
04.11.2014, 16:26 11
Лучший ответ Сообщение было отмечено Димитрий как решение

Решение

Цитата Сообщение от Димитрий Посмотреть сообщение
Программировал в борланде С++6, чтобы писать кросплатформенные программки и использовать библиотеку Opencv, решил перейти на Qt. Пытаюсь освоить уже с месяц. Обьясните поподробней вашу рекомендацию. Как можно использовать многопоточность средствами С++, не используя средства Qt ?
Чтобы писать кросс-платформенные программки без GUI, как у вас в примере в шапке темы, достаточно писать используя STL С++ 11, потому что C++ 11, по сути, поддерживают все компиляторы на всех операционных системах лишь с маленькими различиями. Код С++ - платформонезависимый код по определению, пока вы не используете что-то зависящее от ОС, например WinApi и работу с реестром или платформозависимые фреймворки.
Если же вы хотите писать именно графические приложения, то Qt имеет свои средства многопоточности. Можно и C++ 11, как удобнее, все зависит от проектирования и желания.

Итак, чтобы четко понять - у вас три варианта реализовать многопоточность, и все 3 варианта кросс-платформенные:
1. Использовать потоки С++ 11 (надо включить в .pro файл поддержку нового стандарта, как - я написал выше. По умолчанию он выключен, а в старом стандарте нет поддержки потоков на уровне C++ STL, только OpenMP из пункта 3!).
2. Использовать потоки библиотеки Qt, ничего дополнительного в .pro файл не надо, только в заголовочные.
3. Использовать OpenMP. OpenMP - набор макросов для работы с потоками и поддерживается С++ по умолчанию уже с С++ 99, посему OpenMP будет везде и ничего, опять же, в .pro файл писать не нужно, и даже заголовочные файлы не нужны.
1
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
04.11.2014, 19:00 12
Цитата Сообщение от UndeadBlow Посмотреть сообщение
потому что C++ 11, по сути, поддерживают все компиляторы на всех операционных системах лишь с маленькими различиями
У человека может и не быть компилятора поддерживающий нужную фичу из C++11. Это актуальная проблема для серверных решений на базе GNU/Linix

Про OpenMP то же обман:
1. Существует куча версий OpenMP и их поддержка различается от поставщика компилятора и версии компилятора
2. Нужен дополнительный ключ компилятора -fopenmp(GCC), /openmp(Visual C++)
1
8 / 6 / 1
Регистрация: 15.12.2011
Сообщений: 59
04.11.2014, 19:14 13
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
У человека может и не быть компилятора поддерживающий нужную фичу из C++11. Это актуальная проблема для серверных решений на базе GNU/Linix
Про OpenMP то же обман:
1. Существует куча версий OpenMP и их поддержка различается от поставщика компилятора и версии компилятора
2. Нужен дополнительный ключ компилятора -fopenmp(GCC), /openmp(Visual C++)
Есть компилятор, который поддерживает С++ 11, но не поддерживает потоки? Я тоже люблю занудничать, но автору темы явно пока не нужно знать это, у него проблемы другого уровня. К тому же из контекста очевидно, что он прогает с винды, VS13 ему все нужное даст.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
04.11.2014, 19:24 14
UndeadBlow, C++0x/C++11 Support in GCC.
Из контекста ясно, что у него компилятор GCC, а не VS. VS13 не даст OpenMP 3/4.
0
8 / 6 / 1
Регистрация: 15.12.2011
Сообщений: 59
04.11.2014, 19:58 15
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
UndeadBlow, C++0x/C++11 Support in GCC.
Из контекста ясно, что у него компилятор GCC, а не VS. VS13 не даст OpenMP 3/4.
У них все документировано связанное с OpenMP и никаких проблем не должно возникнуть. 3/4, это вы как так подсчитали точно?
В любом случае, я просто перечислил доступные инструменты. Мешать STL и Tulip не лучший тон.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
04.11.2014, 23:07 16
OpenMP в Visual C++ ясно сказано стандарт 2.0
Стандарты OpenMP
Поддержка OpenMP в GCC

Цитата Сообщение от UndeadBlow Посмотреть сообщение
Мешать STL и Tulip не лучший тон.
STL это Standard Template Library, а не стандартная библиотека С/C++. Почему нельзя взять самое лучшее из различных реализаций? Пока не встречал таких рекомендаций от авторитетов в C++.
0
8 / 6 / 1
Регистрация: 15.12.2011
Сообщений: 59
04.11.2014, 23:21 17
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
STL это Standard Template Library, а не стандартная библиотека С/C++. Почему нельзя взять самое лучшее из различных реализаций? Пока не встречал таких рекомендаций от авторитетов в C++.
Это мое личное мнение, потому что при смешении типов возникает путаница и возможные незаметные баги. Например вот из нашего проекта строка, которая мне не нравится совсем:
Код
this->_key_sha512 = QString::fromStdString(sha512(key_.toStdString()));
Естественно, никакого криминала, но лучше сразу нормировать все типы данных в проекте. Это называется проектирование и подробнее про него вы можете узнать в книге "Совершенный код" (вы первый начали).
0
0 / 0 / 0
Регистрация: 06.07.2008
Сообщений: 32
05.11.2014, 15:39  [ТС] 18
Люди, давайте жить дружно. Почитал ваши топики, немного понял, но понял, что ещё осваивать много. Прочитал пару книжек по Qt, и почти освоил визуальное программирование. Сам язык знал, а вот где - какой кампилятор, какие настройки и для чего, лучше использовать - хотел бы почитать.
У меня
Qt Creator 3.0.1
Основан на Qt 5.2.1 (MSVC 2010, 32 бита)
и комплект
Desktop Qt 5.2.1 MinGW 32bit
с кампилятором
MinGW 4.8.3 32bit g++.hpp
в про-файле написано:
C
1
2
3
4
5
6
7
8
9
QT       += core
QT       -= gui
QMAKE_CXXFLAGS += -std=c++11 -std=gnu++11 -pthread
TARGET = cam4
CONFIG   += console
CONFIG   -= app_bundle
CONFIG   += -std=c++11
TEMPLATE = app
SOURCES += main.cpp
и подключаю библиотеки:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <stdio.h>
#include <thread>
 
 #include "opencv2/objdetect/objdetect.hpp"
 #include "opencv2/highgui/highgui.hpp"
 #include "opencv2/imgproc/imgproc.hpp"
 
//--------------------------------------------------------------------------------------------------------------
 using namespace std;
 using namespace cv;
Все кампилируется и работает, если есть что-то лишнее - скажите, или как сделать лучше. Хочу, чтобы прога работала и под линукс, и андройд, хотя на компе стоит виндовс.
Если знаете книги, что описывают данные вопросы, то хотелось бы почитать.

Включение #include <thread> без ключа в про-файле QMAKE_CXXFLAGS += -pthread даёт ошибку. Одно без другого не работает, хотя про это нигде не сказано. Думаю таких нюансов ещё будет много. Спасибо.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
06.11.2014, 10:34 19
UndeadBlow, приведенный пример ни коем образом не относится к проектированию.
То что вы взяли функцию из сторонней библиотеки которая написана по стандартам(Стандарты программирования на С++) это вопрос к реализации, а не проектированию.
Результатом проектирования является модель объектная(или любая другая, в зависимости от выбранной парадигмы. Объектно-ориентированный анализ и проектирование с примерами приложений.)
0
8 / 6 / 1
Регистрация: 15.12.2011
Сообщений: 59
06.11.2014, 14:38 20
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
UndeadBlow, приведенный пример ни коем образом не относится к проектированию.
Приведенный пример напрямую относится к проектированию архитектуры программы, частью которого является определение используемых типов данных заранее
http://www.ozon.ru/context/detail/id/3159814/
1
06.11.2014, 14:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2014, 14:38
Помогаю со студенческими работами здесь

WebBrowser в консольной программе
Доброго времени суток уважаемые! Искал решение в интернете, но внятного ответа не нашел......

Как завершить поток в программе
нужно завершить поток в программе который принимает синхронно подключение(acept()) Abort...

Посылка сообщения консольной программе
Вот пробовал переберать пароль к рар архиву и вот пишу так ShellExecute (Handle, nil,...

Горячие клавиши в консольной программе
Добрый день. У меня консольная программа под windos: в программе запущенны 2 патока. int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru