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

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

Восстановить пароль Регистрация
 
GBIT
 Аватар для GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
03.02.2013, 16:03     Рекурсивное создание потока #1
написал пример вызова. но только вот отрабатывает вся эта ерунда не совсем верно.
нужно: создать 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 есть подозрение что я недопонимаю что такое рекурсивный вызов и все что написал совершенно не верно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2013, 16:03     Рекурсивное создание потока
Посмотрите здесь:

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

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

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


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

Добавлено через 35 секунд
так как мне тогда сделать так чтобы передавались разные значения параметра в поток?
go
Эксперт C++
3582 / 1362 / 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
GBIT
 Аватар для GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
03.02.2013, 17:46  [ТС]     Рекурсивное создание потока #5
Цитата Сообщение от go Посмотреть сообщение
CreateThread возвращает хендел, который вы почему-то не запоминаете.
просто это мое первое многопоточное приложение и хэндлы потоков пока еще не замарачиваюсь и не закрываю, приложение же когда убивается то и все описатели открытые тоже, но спасибо за напоминание!
Yandex
Объявления
03.02.2013, 17:46     Рекурсивное создание потока
Ответ Создать тему
Опции темы

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