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

Передача параметра в потоки - C++

Восстановить пароль Регистрация
 
Eni87
Сообщений: n/a
22.07.2012, 13:44     Передача параметра в потоки #1
Добрый день уважаемые форумчане!
Подскажите как правильно сделать передачу параметров в поток. В качестве параметра нужно передать число.

Потоки создаю в цикле, хотя собственно вот пример кода.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <Windows.h>
#include <process.h>
unsigned __stdcall potok(void* Param)
{
        static int p = (int)Param;
        char buffer[100];
        wsprintf(buffer,"%u",p);
        MessageBox(0,buffer,"",0); // вывожу в messag параметры, но выводятся 7 - 8 значные 
 //одинаковые числа
        return 0;
}
 
int main ()
{
    for(int i  = 0; i < 10; i++)
    {
        Sleep(500);
        _beginthreadex (NULL,0,&potok, &i ,0, NULL);  // передаю переменную i в поток
    } 
    Sleep(100000);
    return 0;
}
Проблема видимо в том что я передаю адрес переменной, а в цикле она изменяет значение и поэтому в MessageBox выводятся совсем другое.

Подскажите, как правильно передать изменяемую переменную в качестве параметра? Заранее спасибо..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2012, 13:44     Передача параметра в потоки
Посмотрите здесь:

Передача параметра по ссылке C++
C++ передача параметра
Передача параметра предикату в find_if C++
передача параметра в функцию C++
передача параметра в класс C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
22.07.2012, 14:00     Передача параметра в потоки #2
C
1
_beginthreadex (NULL,0,&potok, (void*)i ,0, NULL);
C++
1
_beginthreadex (NULL,0,&potok, reinterpret_cast<void*>(i) ,0, NULL);
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
22.07.2012, 14:08     Передача параметра в потоки #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <Windows.h>
#include <process.h>
unsigned __stdcall potok(void* Param)
{
        static int *p = (int*)Param;
        char buffer[100];
        wsprintf(buffer,"%u",*p);
        MessageBox(0,buffer,"",0); // вывожу в messag параметры, но выводятся 7 - 8 значные 
 //одинаковые числа
        _endthreadex(0);
        return 0;
}
 
int main ()
{
    for(int i  = 0; i < 10; i++)
    {
        Sleep(500);
        _beginthreadex (NULL,0,&potok, &i ,0, NULL);  // передаю переменную i в поток
    } 
    Sleep(100000);
    return 0;
}
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
22.07.2012, 14:47     Передача параметра в потоки #4
Есть вариант не замарачиваться с передачей, а использовать синхронизацию например через критические секции.

Добавлено через 3 минуты
Infinity3000 это вопрос или ответ?
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
22.07.2012, 15:25     Передача параметра в потоки #5
Цитата Сообщение от Avazart Посмотреть сообщение
Infinity3000 это вопрос или ответ?
не понял! ну ответ наверно! с чего Вы взяли что вопрос?
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
22.07.2012, 15:40     Передача параметра в потоки #6
Непонятных коментов
C++
1
2
[QUOTE]// вывожу в messag параметры, но выводятся 7 - 8 значные 
 //одинаковые числа[/QUOTE]
Infinity3000
22.07.2012, 15:47
  #7

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2012, 02:18     Передача параметра в потоки
Еще ссылки по теме:

C++ Передача параметра в функцию
C++ Передача параметра функции
C++ Передача параметра из класса в класс

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

Или воспользуйтесь поиском по форуму:
Eni87
Сообщений: n/a
23.07.2012, 02:18     Передача параметра в потоки #8
Всем спасибо, теперь все работает )
Yandex
Объявления
23.07.2012, 02:18     Передача параметра в потоки
Ответ Создать тему
Опции темы

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