Форум программистов, компьютерный форум CyberForum.ru

C++ и WinAPI

Войти
Регистрация
Восстановить пароль
 
Serg_o_Grey
66 / 66 / 24
Регистрация: 29.03.2016
Сообщений: 339
#1

Передать параметр в поток - C++ WinAPI

09.01.2017, 11:53. Просмотров 184. Ответов 2
Метки нет (Все метки)

Здравствуйте! Потребовалось передать указатель на переменную в поток (для последующего изменения значения переменной). Возникли траблы: значение переменной в main() и в ThreadFunc() отличаются.
Кликните здесь для просмотра всего текста
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
#include <windows.h>
#include <iostream>
#define col 2
using namespace std;
 
DWORD WINAPI ThreadFunc(void* lp);
 
int main()
{
    setlocale(LC_ALL, "Russian");
    BOOL flag[col];
    for (int i=0; i<col; i++) flag[i] = TRUE;
    HANDLE hthr[col];
    for (int i=0; i<col; i++) hthr[i] = 0;
    for (int i=0; i<col; i++)
    {
        printf("Main\tAddr: %d\tVal: %d\n", &(flag[i]), flag[i]);
        hthr[i] = CreateThread(NULL, 0, &ThreadFunc, &(flag[i]), 0, NULL);
    }
    Sleep(1000);
    printf("\n\n");
    for (int i=0; i<col; i++) flag[i] = FALSE;
    for (int i=0; i<col; i++)
    {
        printf("Main\tAddr: %d\tVal: %d\n", &(flag[i]), flag[i]);
        hthr[i] = CreateThread(NULL, 0, &ThreadFunc, &(flag[i]), 0, NULL);
    }
    Sleep(1000);
    return 0;
}
 
DWORD WINAPI ThreadFunc(void* lp)
{
    Sleep(50);
    printf("Thread\tAddr: %d\tVal: %d\n", lp, &lp);
    ExitThread(0);
}

Вывод:
Main Addr: 2686612 Val: 1
Main Addr: 2686616 Val: 1
Thread Addr: 2686616 Val: 18677648
Thread Addr: 2686612 Val: 16580496

Main Addr: 2686612 Val: 0
Main Addr: 2686616 Val: 0
Thread Addr: 2686612 Val: 16580496
Thread Addr: 2686616 Val: 18677648
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2017, 11:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передать параметр в поток (C++ WinAPI):

Передать строку в поток - C++ WinAPI
Есть структура аргумента потока typedef struct { sockaddr_in inaddr; std::string dt; // в ней строка unsigned int stream; ...

Передать WndProc свой параметр - C++ WinAPI
Есть необходимость завести три обработчика окна выполняющих почти то же самое: первый будет рисовать прямоугольники, второй - круги, а...

Можно ли в WndProc передать свой параметр? - C++ WinAPI
Тоесть, в оконную процедуру прилетаю всякие сообщения типа WM_LBUTTONDOWN, WM_KEYDOWN и тд, мне хотелось бы, чтоб в этой глобальной функции...

Передать указатель на класс (как параметр) окну - C++ WinAPI
1) Расскажите,пожалуйста,как передать указатель на какой-л. класс в качестве параметра WPARAM или LPARAM? У меня есть класс,который все...

Параметр MessageBox - C++ WinAPI
Что означает параметр 0? Какое значение имеет L&quot;&quot; (пустое поле)? MessageBox(0,L&quot;Close&quot;,L&quot;&quot;,MB_OK);

передать параметр в поток - Java ME
Здравствуйте. Для существующей процедуры вывода списка кнопок необходимо сделать передачу параметра соответствующего функционалу кнопки. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Alex5
1052 / 715 / 105
Регистрация: 12.04.2010
Сообщений: 1,810
09.01.2017, 15:34 #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
    printf("Thread\tAddr: %d\tVal: %d\n", lp, *(BOOL*)lp);
Serg_o_Grey
66 / 66 / 24
Регистрация: 29.03.2016
Сообщений: 339
09.01.2017, 16:12  [ТС] #3
видимо я запутался немного
Alex5, спасибо
теперь распутался
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2017, 16:12
Привет! Вот еще темы с ответами:

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

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

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

Передать метод как параметр в поток - C#
Добрый день. Мне нужно передать в параметр метода метод Есть вот такой делегат public delegate int stringComparison(String A, String...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru