Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
Люди добрые помогите примером-советом, надо написать приложение оконное под линукс на C++ чтобы по нажатию кнопки Start создавался поток который бы выводил время в поле ввода каждую секунду, а по нажатию кнопки Stop поток бы завершался. На Java я бы это минут за 5-10 сделал, а на C++ даже не представляю что делать, помогите плс. Если я правильно понял то оконные приложения под линуксом разрабатываются в Qt Creator-е? Если это важно то у меня: gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2015, 08:46 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
Alex_Ka, Если так, то отдельный поток тут и не нужен. Достаточно в цикле, в котором ты выводишь время, вызывать qApp->processEvents(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2015, 09:29 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
Я понимаю что именно для такого случая как я написал поток не нужен, но он нужен мне чтобы развивать приложение и не задавать много лишних глупых вопросов потом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2015, 09:32 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
Народ ну хоть кто нибудь помогите, если не кодом то хотябы советом, Как под линукс на C++ делать оконные приложения с потоками и чтобы эти потоки могли обновлять GUI? Единственное что я пока нарыл это Qt Creator есть ли альтернатива Qt Creator-у? и как в Qt Creator-е можно потоки использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2015, 10:29 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
Alex_Ka, книга Шлее М. Qt4.5. Профессиональное программирование на C++ ( 2010 ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2015, 10:46 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
Alex_KaНарод ну хоть кто нибудь помогите, если не кодом то хотябы советом, Как под линукс на C++ делать оконные приложения с потоками и чтобы эти потоки могли обновлять GUI? Ну, например, Qt с QTCreator. Можно ещё на GTK, можно ещё на XWidgets, на Tk, на чистых X-ах. Alex_KaЕдинственное что я пока нарыл это Qt Creator есть ли альтернатива Qt Creator-у? Ну, я дал варианты. Alex_Kaи как в Qt Creator-е можно потоки использовать? Так же, как и не в Qt Creator, использование потоков от библиотеки GUI-элементов не зависит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2015, 00:35 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
m_Sla, Спасибо, то что надо! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2015, 00:46 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Ну в Java из обычных потоков нельзя GUI обновить - поэтому и спрашивал. Еще вопрос по сборке проекта, если я буду использовать cmake то я смогу получить исполнимый файл в итоге или cmake только проверяет проект, библиотеки, заголовки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2015, 00:51 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
Alex_KaНу в Java из обычных потоков нельзя GUI обновить - поэтому и спрашивал.Нигде нельзя. Если хочешь жить без проблем - главный поток работает с ГУИ, остальные только считают, и иногда сообщают главному потоку что они закончили считать какой-то этап. Alex_KaЕще вопрос по сборке проекта, если я буду использовать cmake то я смогу получить исполнимый файл в итоге или cmake только проверяет проект, библиотеки, заголовки?Нет конечно. CMake это сценарий сборки для бедных. Результат работы cmake - будет makefile который уже настоящий сценарий сборки. По правилам записанным в makefile уже будет запускаться компилятор, который произведет объектные файлы. А потом запустится линкер, который уже и соберет из объектных файлов и библиотек исполняемый файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2015, 02:14 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
White Owl, спасибо с cmake-ом уже разобрался. А как тогда из рабочих потоков корректно уведомить GUI чтобы обновить состояние? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 00:36 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
Alex_KaWhite Owl, спасибо с cmake-ом уже разобрался. А как тогда из рабочих потоков корректно уведомить GUI чтобы обновить состояние? установить какой то флаг, а в gui потоке его периодически проверять. можно также посылать сообщения или события, но это platform specific. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2015, 09:27 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
Вот еще назрел вопрос работы с потоками и синхронизацией их, после "простоты" работы с потоками в Java на потоки в C++ страшновато смотреть но надо. У меня: gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9) посдкажите плс. как мне собрать исполнимый файл из исходников примерно такого содержания: //mainthread.cpp #include <iostream> #include <thread> #include "mainthread.h" #include "worker1.h" int callFromThread() { std::cout << "function callFromThread called from thread" << std::endl; return 0; } int synchCallFromThread() { std::cout << "function synchCallFromThread called from any thread or main thread" << std::endl; return 0; } int main() { for ( int idx = 0; idx < 10; ++idx ) { new std::thread(foo); synchCallFromThread(); } return 0; } //mainthread.h int callFromThread() ; int synchCallFromThread() ; //worker1.cpp #include <iostream> #include "mainthread.h" int foo() { std::cout << "from thread" << std::endl; callFromThread(); synchCallFromThread(); return 0; } //worker1.h int foo() ; как сделать чтобы вызов функции synchCallFromThread был потокобезопасен, если надо эту функцию вызывать и из основного потока и из рабочих потоков? как должен выглядеть makefile для этого примера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2015, 14:55 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
ошика в new std::thread - происходит утечка памяти. нужно Код: plaintext 1. detach обязательно. или нужно сздать переменную и вызывать join, но толку от потока тогда не будет :) http://en.cppreference.com/w/cpp/thread/thread гуй надо наверное обновлять с мутексами. то есть при любом обращении к гую нужно брать меткс гуя. g++ -std=c++14 your_file.cpp ну или g++ -std=c++11 если gcc о 14 стандарте ничего не знает еще :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2015, 15:19 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
ой, забыл g++ -std=c++14 your_file.cpp -lpthread этот -lpthread нужно когда работаешь с потоками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2015, 15:21 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
alexy_black, спасибо, заменил new std::thread(foo); на std::thread(foo).detach(); g++ -std=c++11 mainthread.cpp -lpthread /tmp/ccpo7iYh.o: In function `main': mainthread.cpp:(.text+0x125): undefined reference to `foo()' collect2: ошибка: выполнение ld завершилось с кодом возврата 1 с ошибкой понятно компилятор не видит описания foo, а как мне makefile сделать для этого примера из 4 файлов? join мне не нужен т.к. мне надо чтобы у меня потоки "крутились" и основной поток продолжал работу. А как правильно сделать "синхонизированную" функцию чтобы ее и основной поток и рабочие потоки дергали безопасно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2015, 15:47 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
Alex_Ka, Знание джавы не освобождает от чтения документации по C++. Конкретно по потокам я бы рекомендовал прочитать эту книжку для начала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2015, 15:58 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
конечно. а кто скажет компилятору где исходники foo ?? g++ -std=c++11 mainthread.cpp -lpthread в это команду указан только один файл, а хотел вроде два скомпилировать? во втором и находится код foo, но он не добавлен к компиляции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2015, 16:11 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
Даже я знаю, что для компиляции четырёх файлов их можно указать в комстроке (да, все) и не морочить(ся) написанием make-файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2015, 16:41 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
YesSql , спасибо за книжку, обязательно прочитаю. (правда там только 2 главы в открытом доступе, но для начала мне этого хватит). alexy_black , да, я хотел нечно вроде: g++ -std=c++11 -o main mainthread.cpp worker1.cpp -lpthread из makefile получить, вроде можно как-то сразу всю директорию с сырцами компилировать, а не указывать каждый в командной строке. и еще уже конкретный вопрос по этому примеру, вот я компилирую: g++ -std=c++11 -o main mainthread.cpp worker1.cpp -lpthread запускаю ./main и вижу что вызывается только synchCallFromThread() из основного потока а создаваемые потоки не запускаются, почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2015, 16:41 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
лучше сразу создать CMakeLists.txt файл. удобнее. там есть find_package (Threads) а к библиотекам исполяемого файла надо добавить ${CMAKE_THREAD_LIBS_INIT} это добавил флаг -lpthread ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2015, 16:48 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
Alex_Kaи еще уже конкретный вопрос по этому примеру, вот я компилирую: g++ -std=c++11 -o main mainthread.cpp worker1.cpp -lpthread запускаю ./main и вижу что вызывается только synchCallFromThread() из основного потока а создаваемые потоки не запускаются, почему? На запуск потока требуется время. твой корневой поток заканчивается быстрее чем стартуют создаваемые потоки. для предотврощения этого используется join перед окончанием корневого потока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2015, 17:02 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
YesSql , спасибо, поставлю задержку после создания потоков в основном потоке. alexy_black , спасибо, вот мой CMakeLists.txt : cmake_minimum_required( VERSION 2.8 ) ADD_DEFINITIONS("-std=c++11") set (PROJECT threads) project (${PROJECT}) find_package (Threads) set (HEADERS mainthread.h worker1.h) set (SOURCES mainthread.cpp worker1.cpp) source_group ("Header Files" FILES ${HEADERS}) source_group ("Source Files" FILES ${SOURCES}) add_executable (${PROJECT} ${HEADERS} ${SOURCES}) target_link_libraries (${PROJECT} ${LIBRARIES}) cmake . make ./threads terminate called after throwing an instance of 'std::system_error' what(): Enable multithreading to use std::thread: Operation not permitted Аварийный останов (core dumped) объясните плс. в чем проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2015, 17:15 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
если я правильно понял, переменная ${LIBRARIES} пуста. это пожно проверить так message("my libraries ${LIBRARIES}") при вызове cmake снова, должно отобразиться my libraries [набор_библиотек] вот так должно сработать target_link_libraries (${PROJECT} ${CMAKE_THREAD_LIBS_INIT}) эта переменная - ${CMAKE_THREAD_LIBS_INIT} - становиться доступной после вызова find_package(Threads) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2015, 22:38 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
Просто с потоками разобрался кажется. Теперь задача посложнее будет. Надо сделать потоки-классы(как в java) на c++ под линукс. Итак, надо чтобы в основном потоке были 2-е функции которые позволяют основному и рабочим потокам изменять и читать состояние некого объекта(obj) - для этого надо сделать эти функции(или часть кода в них) потокобезопасными, возникают 2 вопроса: 1. как пользоваться мутексами для этого? (или нужно что-то другое?) 2. как написать класс поток? (если это возможно?) //желательно чтобы рабочие потоки ничего не делали пока ожидают смены состояния объекта obj и чтобы основной поток мог уведомить рабочие потоки при смене статуса объекта obj. и еще вопрос, можно-ли в потоке-классе написать функцию которая будет callback если да то как например при наличии 1000 объектов-потоков будет вызываться нужная функция сторонним приложением? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2015, 18:12 |
|
||
|
Linux: C++, GUI, thread
|
|||
|---|---|---|---|
|
#18+
http://en.cppreference.com/w/cpp/thread Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2015, 18:16 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39138657&tid=2018643]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 265ms |

| 0 / 0 |
