Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 27.02.2010
Сообщений: 71

Потоки

08.08.2019, 18:40. Показов 622. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нашел пример кода. Но не пойму одну вещь. В случае, если создать поток в приостановленном состоянии, а потом его запустить, то функция, которая передавалась этому потоку не выполняется. Я тут чего то не понимаю, как происходит этот запуск потока. Можете объяснить? В итоге я хочу чтобы после запуска потока посчиталось выражение в функции и я его мог вывести.

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
46
47
48
49
#include <windows.h>
#include <stdio.h>
#include <conio.h>
 
HANDLE  SumThread;
HANDLE  MltThread;
int sum_res;
int mlt_res;
 
DWORD WINAPI thr_sum(LPVOID lpParameter)
{
    sum_res = ((int*)lpParameter)[0] + ((int*)lpParameter)[1];
    return sum_res;
}
 
DWORD WINAPI thr_mlt(LPVOID lpParameter)
{
    mlt_res = ((int*)lpParameter)[0] * ((int*)lpParameter)[1];
    return mlt_res;
}
 
int main(int argc, char** argv)
{
    DWORD thrSumId;
 
    int vals[2];
    vals[0] = 10;
    vals[1] = 5;
 
    SumThread = CreateThread(NULL, NULL, thr_sum, vals, CREATE_SUSPENDED, &thrSumId); // создаем 1-й поток
 
    if (SumThread == NULL) throw;
 
    MltThread = CreateThread(NULL, NULL, thr_mlt, vals, CREATE_SUSPENDED, &thrSumId); // и 2-й
 
    if (MltThread == NULL) throw;
 
    ResumeThread(SumThread);
    ResumeThread(MltThread);
 
 
    printf("result: %d\n", sum_res);
    printf("result: %d\n", mlt_res);
 
    
    _getche();
    return 0;
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.08.2019, 18:40
Ответы с готовыми решениями:

Потоки
вобщем есть 3 файла с каждого считуютса даные в 4вертый (3мя потоками)как зделать чтоб они считывались по очереди сначала 2байта с 1 потом...

потоки
Люди,подскажите кто знает! #include&lt;windows.h&gt; #include&lt;iostream&gt; using namespace std; HANDLE hm; const int N=5; int...

Потоки
Помогите создать проект Win32 с потоками, в Microsoft Visual 2010 C++. Если можно с комментариями, как и что происходит??

7
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
09.08.2019, 10:23
Попробовал все работает. Можно поконкретней описать задачу?
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
09.08.2019, 10:34
Цитата Сообщение от Sierra26 Посмотреть сообщение
Можно поконкретней описать задачу?
наверное ТС имеет ввиду, что если просто запускать на выполнение в консоли будет два нуля.
если сделать breakpoint, результат в консоли будет 0 и 50, но при этом sum_res == 15, а mlt_res == 50.
1
1 / 1 / 1
Регистрация: 27.02.2010
Сообщений: 71
09.08.2019, 11:46  [ТС]
Да, именно так и получается. А чаще выводятся нули в консоли. Вот интересует почему так происходит?
0
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
09.08.2019, 12:22
Ну все просто. Вывод происходит раньше чем поток присвоение число. Сделай после ResumeThread(MltThread); Sleep(500) и все поймешь!
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
09.08.2019, 12:23
Цитата Сообщение от Teem Посмотреть сообщение
Да, именно так и получается. А чаще выводятся нули в консоли. Вот интересует почему так происходит?
Потому что printf("result: %d\n", sum_res); выполняется раньше, чем завершаться потоки.
Здесь надо добавить событие, CreateEvent ждать его перед printf и взводить в потоках
0
7 / 7 / 3
Регистрация: 04.06.2015
Сообщений: 189
09.08.2019, 13:26
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Здесь надо добавить событие, CreateEvent ждать его перед printf и взводить в потоках
Можно проще WaitForMultipleObjects
0
1 / 1 / 1
Регистрация: 27.02.2010
Сообщений: 71
09.08.2019, 14:17  [ТС]
Теперь понял, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.08.2019, 14:17
Помогаю со студенческими работами здесь

Потоки
Добрый вечер, начал изучать потомки. и появляются вопросы, пока еще не программировал на уровне поток, чисто теория. Даже не знаю в ту...

Потоки
Всем привет, возникла проблема при создании потока, или не выполнении им функции, сам пока непонял))) Прошу помощи, проект нормально...

потоки
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;Windows.h&gt; #include &lt;queue&gt; #include &lt;conio.h&gt; #include &lt;time.h&gt; #include...

Потоки
Здравствуйте. Начал изучать потоки и появилась необходимость передать результат работы потока в &quot;основной поток&quot;. Для этого...

Потоки
int counter=9000; DWORD WINAPI ThereadA(LPVOID p){ for (int i=0; i&lt;10000; i++) counter ++;} DWORD WINAPI ThereadB (LPVOID p) { ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru