11 / 10 / 2
Регистрация: 19.02.2018
Сообщений: 393

Функция создаёт новые потоки

27.01.2020, 12:15. Показов 1860. Ответов 4
Метки c++, lua (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте всем. Такая ситуация, пишу функцию, которая создаёт новые потоки, те в свою очередь запускают функцию. Объясню, функцию принимает указатель на игрока, вызывает функцию в новом потоке, который постоянно проверяет жив ли пед, если нет, удаляет его модель из из игры. Допустим, функция запустилась 3 раз, создается 3 потока, в котором идет проверка отдельного педа.
вот набросок 2 функций для упрощения опустил детали.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static int getcord() {
        this_thread::sleep_for(chrono::milliseconds(1));
 
            CWorld::Players[CWorld::PlayerInFocus].m_nMoney += 100;// дать денег  
            this_thread::sleep_for(chrono::milliseconds(100));
    return 0;
};
int go_to_route(lua_State* L) {//уст маршрут авто.
    try {
        if (LUA_TTABLE == lua_type(L, 2) && LUA_TLIGHTUSERDATA == lua_type(L, 1)) {
            reversestack(L);
            if (LUA_TLIGHTUSERDATA == lua_type(L, -1)) {
                std::thread(getcord);
                return 0;
            }
        }
        else { throw "bad argument in function go_to_route"; }
    }
    catch (const char* x) { writelog(x); }
    return 0;
};
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.01.2020, 12:15
Ответы с готовыми решениями:

Кто-нибудь создаёт потоки как в MSDN?
Приветствую, жизнь заставила писать на 2005м MVS и использовать MS SQL SERVER (требует ObjectARX). Вообщем, раньше было какое-то...

Не создаются новые потоки при распараллеливании цикла for (работает только один поток - главный)
Доброго времени суток, ребята! Пишу код по распараллеливанию умножения матриц. Всё вроде работает верно, но есть один момент OMP не...

Функция которая создаёт прямоугольник
Написать функцию, которая создает прямоугольник из указанных пользователем символов с указанным параметрами

4
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
27.01.2020, 13:02
Цитата Сообщение от Егор Щербанов Посмотреть сообщение
Здравствуйте всем. Такая ситуация, пишу функцию, которая создаёт новые потоки, те в свою очередь запускают функцию. Объясню, функцию принимает указатель на игрока, вызывает функцию в новом потоке, который постоянно проверяет жив ли пед, если нет, удаляет его модель из из игры. Допустим, функция запустилась 3 раз, создается 3 потока, в котором идет проверка отдельного педа.
вот набросок 2 функций для упрощения опустил детали.
А ждать завершения этих потоков ты не планируешь?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
std::thread go_to_route(lua_State* L) {//уст маршрут авто.
    try {
        if (LUA_TTABLE == lua_type(L, 2) && LUA_TLIGHTUSERDATA == lua_type(L, 1)) {
            reversestack(L);
            if (LUA_TLIGHTUSERDATA == lua_type(L, -1)) {
                return std::thread(getcord);
            }
        }
        else { throw "bad argument in function go_to_route"; }
    }
    catch (const char* x) { writelog(x); }
    return std::thread();
};
C++
1
2
3
4
5
6
std::thread thread = go_to_route(..............);
.......................
 
 
if (thread.joinable())
    thread.join();
0
11 / 10 / 2
Регистрация: 19.02.2018
Сообщений: 393
27.01.2020, 13:08  [ТС]
oleg-m1973, Спасибо большое за Ваш ответ, потоки создаваемые функцией, будут независимые, не ждать завершения основного потока. Функция go_to_route должна возвращать 0, чтобы все успешно работало в lua/
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
27.01.2020, 13:09
Лучший ответ Сообщение было отмечено Егор Щербанов как решение

Решение

Цитата Сообщение от Егор Щербанов Посмотреть сообщение
oleg-m1973, Спасибо большое за Ваш ответ, потоки создаваемые функцией, будут независимые, не ждать завершения основного потока.
Тогда делай им detach(), иначе программа будет падать
C++
1
std::thread(getcord).detach();
1
11 / 10 / 2
Регистрация: 19.02.2018
Сообщений: 393
27.01.2020, 13:54  [ТС]
oleg-m1973, спасибо огромное все работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.01.2020, 13:54
Помогаю со студенческими работами здесь

Функция, которая создает массив значений с шагом dx =0.5
Написать функцию, которая создает массив значений с шагом dx =0.5 необходимой размерности, если у пользователя запрашиваются границы A и B....

Функция получает стекк и создает из него список
Народ помогите пожалуйста я пропустил тему и не могу прогу сделать даже не представляю как мне завтро хоть умри сдать если вам не сложно...

Процессы и потоки (функция GetProcess)
вот код навороченого диспетчера процессов, OpenThread выдаёт ошибку , почему ? #include "stdafx.h" #include...

Проверить, завершит ли функция работу за X мс. (Потоки)
Приветствую читающих сию тему. Проблема такая: Захотел написать функцию, которая проверяет, вернёт ли функция значение за заданное время,...

Долго работает функция, использующая потоки
пытаюсь реализовать параллельную сортировку Шелла. Но, похоже, что-то делаю не так. Она (если visual studio не врёт) медленнее обычной...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru