Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Eni87
1

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

22.07.2012, 13:44. Просмотров 2012. Ответов 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 выводятся совсем другое.

Подскажите, как правильно передать изменяемую переменную в качестве параметра? Заранее спасибо..
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.07.2012, 13:44
Ответы с готовыми решениями:

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

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

Передача параметра по ссылке
Всем здравствуйте. Други, помогите разобраться. Сидю :) вникаю в работу указателей и памяти,...

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

7
Эксперт С++
1659 / 1031 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
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
1064 / 582 / 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
Эксперт С++
8296 / 6050 / 602
Регистрация: 10.12.2010
Сообщений: 28,133
Записей в блоге: 26
22.07.2012, 14:47 4
Есть вариант не замарачиваться с передачей, а использовать синхронизацию например через критические секции.

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

Не по теме:

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

0
Eni87
23.07.2012, 02:18 8
Всем спасибо, теперь все работает )
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2012, 02:18

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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