Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
Eni87
0 / 0 / 0
Регистрация: 19.07.2012
Сообщений: 2
#1

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

22.07.2012, 13:44. Просмотров 1340. Ответов 7
Метки нет (Все метки)

Добрый день уважаемые форумчане!
Подскажите как правильно сделать передачу параметров в поток. В качестве параметра нужно передать число.

Потоки создаю в цикле, хотя собственно вот пример кода.
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 выводятся совсем другое.

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

передача параметра
привет всем ! вот код #include &lt;iostream&gt; using namespace std; struct...

Передача параметра по ссылке
Здравствуйте! Подскажите пожалуйста! Делаю пример из книги: #include...

Передача параметра в функцию
Проблема заключается в следующем. Есть функция, вот её прототип. void...

передача параметра в класс
в методе я вывожу поля класса по условию, как передавать в класс переменную х,...

Передача параметра в функцию
Столкнулся с муторной проблемой передачи параметра в функцию. Суть задания...

7
Nick Alte
Эксперт С++
1647 / 1019 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 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);
1
Infinity3000
1060 / 579 / 87
Регистрация: 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;
}
2
Avazart
Эксперт С++
7718 / 5627 / 549
Регистрация: 10.12.2010
Сообщений: 25,333
Записей в блоге: 17
22.07.2012, 14:47 #4
Есть вариант не замарачиваться с передачей, а использовать синхронизацию например через критические секции.

Добавлено через 3 минуты
Infinity3000 это вопрос или ответ?
1
Infinity3000
1060 / 579 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
22.07.2012, 15:25 #5
Цитата Сообщение от Avazart Посмотреть сообщение
Infinity3000 это вопрос или ответ?
не понял! ну ответ наверно! с чего Вы взяли что вопрос?
0
Avazart
Эксперт С++
7718 / 5627 / 549
Регистрация: 10.12.2010
Сообщений: 25,333
Записей в блоге: 17
22.07.2012, 15:40 #6
Непонятных коментов
C++
1
2
[QUOTE]// вывожу в messag параметры, но выводятся 7 - 8 значные 
 //одинаковые числа[/QUOTE]
1
Infinity3000
22.07.2012, 15:47
  #7

Не по теме:

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

0
Eni87
0 / 0 / 0
Регистрация: 19.07.2012
Сообщений: 2
23.07.2012, 02:18 #8
Всем спасибо, теперь все работает )
0
23.07.2012, 02:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2012, 02:18

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

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

Передача параметра функции
Подскажите пожалуйста каким образом передавать уже явные параметры...


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

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

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