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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
#1

Рекурсивное создание потока - C++

03.02.2013, 16:03. Просмотров 377. Ответов 4
Метки нет (Все метки)

написал пример вызова. но только вот отрабатывает вся эта ерунда не совсем верно.
нужно: создать 10 потоков и чтобы каждый из потоков в консоль с интервалом в секунду выводил свой псевдономер(псевдо - потому что номер 1-10).
а у меня они все пишут одинаковый номер.

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
#include <Windows.h>
#include <stdio.h>
#include <conio.h>
 
 
bool Flag=true;
 
DWORD WINAPI PthreadSecure (void *arg)
{
    while(Flag==true)
    {
        Sleep(1000);
        printf("my#: %s\n",arg);
    }
 
    return 0;
}
 
int main()
{
    int i;
    char boff[10];
 
    for(i=0;i<10;i++)
    {
        CreateThread(0,0,PthreadSecure,itoa(i,boff,10),0,0);
    }
    
    printf("Pthreads has been started..\n");
    getch();
 
    Flag=false;
}
ps есть подозрение что я недопонимаю что такое рекурсивный вызов и все что написал совершенно не верно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2013, 16:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рекурсивное создание потока (C++):

Создание потока из потока. - C++
Надо создать поток 1, в нем создать поток 2, сам я жуткий дураг, немаловероятно что правильного в коде вообще ничего нет ) ругается...

Создание потока - C++
В общем дело такое, есть функция main, само собой, и есть функция void music (), void music () { Beep(1046, 300); //до Beep(1046,...

Создание потока - C++
Доброй всем ночи! Перерыскал cplusplus.com, но так и не разобрался. Может ли кто-нибудь подсказать, как создать поток, который бы...

Создание нового потока - C++
Вот тут выдаёт ошибку. DWORD thID; CreateThread(NULL,NULL,SexToClient, &amp;client_socket,NULL,&amp;thID); } ...

Создание потока в классе - C++
Всем здрасьте ! Меня волнует вопрос: Как создать поток в классе ? Находил много реализаций, но они уж что-то громоздкие, аж на...

Создание объекта класса из потока - C++
Всем привет. Пишу простенькую игрушку, понадобилось для нее подобие движка(сразу оговорюсь: для рендеринга используется OpenGL, игра...

4
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
03.02.2013, 16:41 #2
Цитата Сообщение от GBIT Посмотреть сообщение
а у меня они все пишут одинаковый номер.
Я подозреваю, что это номер 9?

Добавлено через 36 секунд
Цитата Сообщение от GBIT Посмотреть сообщение
ps есть подозрение что я недопонимаю что такое рекурсивный вызов
Рекурсии у Вас нет.
0
GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
03.02.2013, 17:02  [ТС] #3
Цитата Сообщение от go Посмотреть сообщение
подозреваю, что это номер 9?
все верно

и даже кажется понял почему у всех 9:
сначала отрабатывает 10 раз for. *arg передача по адресу. а по этому адресу меняется значение, и когда потоки начинают работать то у всех последнее значение 9.
поправьте меня если я не прав.


Цитата Сообщение от go Посмотреть сообщение
Рекурсии у Вас нет.
ага. уже понял.

Добавлено через 35 секунд
так как мне тогда сделать так чтобы передавались разные значения параметра в поток?
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
03.02.2013, 17:23 #4
Цитата Сообщение от GBIT Посмотреть сообщение
и даже кажется понял почему у всех 9:
Да. Правильно. Потоки долго создаются. Но и решение не верное. Вот простой Си-шный вариант.
C
1
2
3
4
5
6
7
char buf[10][10];
 
    for(i=0;i<10;i++)
    {
        sprintf(buf[i], "%d\n", i);
        CreateThread(NULL, 0 , PthreadSecure, buf[i], 0, NULL);
    }
И еще совет. CreateThread возвращает хендел, который вы почему-то не запоминаете. Почитайте про функцию WaitForMultipleObjects http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
1
GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
03.02.2013, 17:46  [ТС] #5
Цитата Сообщение от go Посмотреть сообщение
CreateThread возвращает хендел, который вы почему-то не запоминаете.
просто это мое первое многопоточное приложение и хэндлы потоков пока еще не замарачиваюсь и не закрываю, приложение же когда убивается то и все описатели открытые тоже, но спасибо за напоминание!
0
03.02.2013, 17:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2013, 17:46
Привет! Вот еще темы с ответами:

Создание консоли для потока - C++
Вомзожно ли создать несколько консолей для одного процесса ? Хотелось бы каждому потоку выделить консоль для ввода/вывода...

Вызывть метод одного потока из другого потока - C++
Здравствуйте, подскажите пожалуйста, как можно реализовать такую штуку : есть один поток(1), который вызывает метод у обьекта, этот...

Рекурсивное сложение - C++
Дорогие друзья,объясните пожалуйста, если функция возвращает значение fib(n-1) + fib(n-2); при значении к примеру n=5,какой будет...

Рекурсивное вычисление - C++
Доброе время суток!!! Помогите пожалуйста решить две задачи с помощью рекурсии. За ранее огромное спасибо!!! Задача №1. Написать...


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

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

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