Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для Helen_2001
15 / 13 / 4
Регистрация: 23.08.2017
Сообщений: 187

Как передать событие в поток

14.02.2019, 14:00. Показов 1739. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как в уже рабочий поток передать событие (значение count) без глобальных переменных ? И так, чтобы этот поток сразу на него реагировал. Можно как-то подключиться в поток и менять переменные в нем ?

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <thread> 
#include <chrono>
#include <iostream>
 
void worker()
{
  int count=0;
  while(true)
  {
    std::cout << count << std::endl;
    std::this_thread::sleep_for(std::chrono::seconds(1));
    ++count;
  }
}
 
 
// event_agent запускается по событию
void event_agent()
{
 
  // тут нужно передать значение переменной int в уже рабочий поток worker() для переменной count;
 
}
 
int main()
{
    ....... // тут слушатель
 
    // запускаем поток
    std::thread thr_worker = std::thread(worker);
    thr_worker.join();
  
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.02.2019, 14:00
Ответы с готовыми решениями:

Как передать функцию в поток
Имеется стандартный пример пример создания потока в C++Builder Unit2: ...

Как передать параметр в поток
Здравтсвуйте, есть функция, принмающая строку и хочу, чтобы она заработала в новом потоке - как можно это сделать? Если функция не...

Как передать указатель в поток?
Есть GUI прога, в главном классе создаётся объект потока. Вопрос: как передать этому потоку указатель, к примеру, на label мэйнфрейма, чтоб...

3
 Аватар для igorrr37
2894 / 2041 / 992
Регистрация: 21.12.2010
Сообщений: 3,791
Записей в блоге: 9
14.02.2019, 16:16
Один поток может вложить данные в promise, а другой поток извлечь эти данные из future
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <thread> 
#include <chrono>
#include <iostream>
#include <future>
#include <memory>
using namespace std::chrono_literals;
 
void worker(std::future<int> ftr)
{
    int count = 0;
    while (true)
    {
        std::cout << count << std::endl;
        std::this_thread::sleep_for(1s);
        if (ftr.valid() && ftr.wait_for(0ms) == std::future_status::ready)
        {
            count += ftr.get();
        }
        else
        {
            ++count;
        }
    }
}
 
// event_agent запускается по событию
void event_agent(std::promise<int> prm)
{
    // тут нужно передать значение переменной int в уже рабочий поток worker() для переменной count;
    std::this_thread::sleep_for(5s);
    prm.set_value(100);
}
 
int main()
{
    // тут слушатель
    std::promise<int> prm;
    auto ftr = prm.get_future();
 
    std::thread thr{ event_agent, std::move(prm) };
    std::thread thr_worker{ worker, std::move(ftr) };
 
    thr.join();
    thr_worker.join();
}
1
 Аватар для Loafer
19 / 11 / 7
Регистрация: 03.11.2016
Сообщений: 34
Записей в блоге: 35
23.02.2019, 18:38
Цитата Сообщение от igorrr37 Посмотреть сообщение
Один поток может вложить данные в promise, а другой поток извлечь эти данные из future
А нельзя для аналогичной цели использовать просто указатель на int?
0
 Аватар для igorrr37
2894 / 2041 / 992
Регистрация: 21.12.2010
Сообщений: 3,791
Записей в блоге: 9
23.02.2019, 19:12
Цитата Сообщение от Loafer Посмотреть сообщение
просто указатель на int

Не по теме:

Как же всё это пошло, избито, шаблонно... Было уже тысячу раз...
...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.02.2019, 19:12
Помогаю со студенческими работами здесь

Как передать параметр в поток?
Здравствуйте, помогите с кодом, сделал так, оно выводит 200 раз по 200 строк, а необходимо что бы сразу запустилось 200 потоков и в каждом...

Как передать параметр в поток
Мне надо передать ListView1.SelectedItems(0).SubItems.Item(2).Text в новый поток, как это сделать ? Dim pt As New...

Как передать аргументы в поток?
Здравствуйте, как ни стараюсь разобраться, никак не получается. Помогите пожалуйста. main.cpp #include &quot;sec1.cpp&quot; ...

Как передать в поток объект класса
Допустим есть класс: class P { private: string text; public: void Text_create(string new_text); // создаем новую...

Как передать QTcpSocket в новый поток?
Всем добрый вечер. Понимаю, что тем заезжена, но все же. Пытаюсь с помощью moveToThread() передать новый сокет в другой поток, но получаю...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru