|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|||||||||||
А можно ли дождаться выполнения CreateThread ?17.10.2019, 20:57. Показов 6062. Ответов 59
Метки нет (Все метки)
Здравствуйте,
Решил немного с в winapi поиграться и понял, что мало че понимаю ![]() Вот взял самую простую функцию CreateThread:
Вот к примеру несколько вопросов: 1)Как в функцию my_function1 через CreateThread передать более одно параметра ? 2)Почему, если нужно передать параметр по ссылке, то в CreateThread (&i), ведь когда просто в C++ передаешь по ссылке, то так делать не нужно, только указать в приемной функции, что функция принимает параметр по ссылке, а не по значению. 3)И можно ли дождаться в какой то точке выполнения CreateThread ? По идее можно, ведь в std:thread это как т о реализовано.
0
|
|||||||||||
| 17.10.2019, 20:57 | |
|
Ответы с готовыми решениями:
59
Дождаться выполнения процедуры
|
|
|
|||||||||
| 22.10.2019, 21:59 | |||||||||
|
вы хоть прототип функции видели?
LPTHREAD_START_ROUTINE это тип, который нужно передать в функцию CreateThread вы передаёте же остальные параметры размер стека, DWORD и прочее, тоже самое и здесь. как таковой его использовать не имеет смысла, поэтому обычно его приводят к необходимому типу. вы поставьте задачу в виде текста, а не пытайтесь отобразить её в коде, у вас это не получается.
1
|
|||||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||
| 22.10.2019, 22:07 | ||||
|
Добавлено через 1 минуту И не надо перед ней ставить (LPTHREAD_START_ROUTINE), должно компилироваться без этого Добавлено через 3 минуты как-то a[0] выглядит лучше, чем ((int*)Param)[0] Добавлено через 3 минуты
1
|
||||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|
| 22.10.2019, 22:47 [ТС] | |
|
0
|
|
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
||||||
| 23.10.2019, 19:14 [ТС] | ||||||
|
Получается передать более одного аргумента можно только через struct ?
Делаю так:
0
|
||||||
|
2846 / 1707 / 273
Регистрация: 19.02.2010
Сообщений: 4,488
|
|||||||
| 23.10.2019, 20:03 | |||||||
Сообщение было отмечено Optimus11 как решение
РешениеДалее просто приводите аргумент к указателю на тип-структуру, и явно обращайтесь к именам полей:
1
|
|||||||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|
| 23.10.2019, 20:35 [ТС] | |
|
Работает.
А другоо способа, как передать переменную в функцию помимо структуры нет ? Просто получается, что есть в main переменная которую я хочу передать string i, я создаю структуру, присваиваю элементу структуры значение этой переменной, и когда уже в функции меняю значение, то меняется значение не переменной string i, а элемента структуры f1, а надо чтобы переменной ![]() То есть нужно по завершению потока, присваивать значения string i = Structura.f1. Этож неудобно. В std::thread как то ведь это реализоаано. Мли там примерно так и реализовано может, только скрыто.
0
|
|
|
2846 / 1707 / 273
Регистрация: 19.02.2010
Сообщений: 4,488
|
||
| 23.10.2019, 21:01 | ||
|
Если надо менять значения нескольких переменных - то предварительно в передаваемую в поток структуру не их значения копировать, а адреса (чтобы иметь возможность затем менять данные в "исходных" областях памяти, а не в их копиях). Т.е. структурный тип создавать из указателей.
1
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||||
| 23.10.2019, 22:12 | |||||||
0
|
|||||||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
||
| 24.10.2019, 19:15 [ТС] | ||
|
0
|
||
|
|
||||||||||||
| 27.10.2019, 12:58 | ||||||||||||
|
- определение базового адреса (откуда будет начинаться исполнение потока) LPTHREAD_START_ROUTINE lpStartAddress - передаваемые параметры в поток LPVOID lpParameter (необязательно если функция потока исполняется сразу в коде программы) LPVOID lpParameter может иметь несколько аргументов, например
поток создаётся в 2 случаях: - в собственном процессе (приложении) для выполнения разных задач по оптимизации приложения (например, когда читается большой файл или отображается в память, а приложение имеет интерфейс, чтобы не зависал GUI целесообразно чтение этого файла проводить в отдельном потоке) - внедрение своего потока в чужой процесс с целью исполнения некоторого кода, тогда
2
|
||||||||||||
|
2 / 2 / 0
Регистрация: 08.10.2019
Сообщений: 11
|
||
| 27.10.2019, 18:13 | ||
|
1
|
||
|
фрилансер
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
|
||||||
| 27.10.2019, 18:47 | ||||||
|
Alexei55555,
в тёмных глубинах WinAPI есть такие определения
0
|
||||||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
||
| 27.10.2019, 18:51 [ТС] | ||
|
Нн, все нормально, чуть выше мне уже подсказали, чт нужно прост правильно функцию оюьявить и тогда можно и без этого. Добавлено через 2 минуты Подскажите пожалуйста, а можно ли создать CreateThread и после выполнения ее функции, чт юы поток не удалился, а чтобы остался в неактивном состоянии, что бы него в этот поток можно было передать другую функцию, чтобы не тратииь время процессора на создание нового потока ?
0
|
||
|
фрилансер
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
|
||
| 27.10.2019, 18:54 | ||
|
Optimus11, конечно можно, просто вызови другую функцию
![]()
0
|
||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|||
| 27.10.2019, 18:57 [ТС] | |||
![]()
0
|
|||
|
|
||
| 28.10.2019, 10:50 | ||
|
создание процессов и потоков - одни из самых масштабных internal-функций. но учитывая качественные и количественных технологии современных процессоров экономить ресурсы не имеет смысла, всё происходит за ничтожные доли секунды.
2
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 28.10.2019, 11:02 | ||
|
И здесь не только вопрос производительности - создание потока, это операция, которая может вызвать исключение (т.е. поток может не создастся), соответственно твой алгоритм должен будет как-то реагировать на это. Пул потоков - тоже не таблетка от всех болезней. Во-первых, количество потоков в нём ограничено, во-вторых - на запуск твоих задач в пуле тоже требуются определённые накладные расходы.
1
|
||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|
| 28.10.2019, 11:12 [ТС] | |
|
Так как все таки можно манипулиповать потоком createthread так, что бы к примеру в начале я создал 50 потоков, но после завершения переданной функции он не удалился сичтемой, а что бы я мог в какой либо из свободных из этих 50 потокоы опять активировать и отправить туда нужную функцию ?
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||||
| 28.10.2019, 11:18 | |||||||
|
Не завершай переданную функцию, а жди в ней события
0
|
|||||||
| 28.10.2019, 11:18 | |
|
Как дождаться выполнения асинхронной функции? Дождаться полного выполнения пула потоков Дождаться полного выполнения пула потоков Дождаться выполнения AJAX запроса и вернуть значение Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
|
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
|
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|