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

C++ и WinAPI

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

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

09.01.2017, 11:53. Просмотров 165. Ответов 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
C++ WinAPI Поток запускает потоки
C++ WinAPI Как создать поток?
Вылетает поток C++ WinAPI
C++ WinAPI Передать WndProc свой параметр
C++ WinAPI Некорректный параметр GetNamedSecurityInfo()
C++ WinAPI Параметр MessageBox
C++ WinAPI Можно ли в WndProc передать свой параметр?
C++ WinAPI Дополнительный параметр в функции
C++ WinAPI Не запускается поток
C++ WinAPI Передать строку в поток

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alex5
1031 / 694 / 102
Регистрация: 12.04.2010
Сообщений: 1,750
09.01.2017, 15:34     Передать параметр в поток #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
    printf("Thread\tAddr: %d\tVal: %d\n", lp, *(BOOL*)lp);
Serg_o_Grey
59 / 59 / 22
Регистрация: 29.03.2016
Сообщений: 301
09.01.2017, 16:12  [ТС]     Передать параметр в поток #3
видимо я запутался немного
Alex5, спасибо
теперь распутался
Yandex
Объявления
09.01.2017, 16:12     Передать параметр в поток
Ответ Создать тему
Опции темы

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