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

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

03.02.2013, 16:03. Просмотров 656. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2013, 16:03
Ответы с готовыми решениями:

Рекурсивное создание двунаправленного кольца
Рекурсивное создание двунаправленного кольца, собственно это и задание. Подсобите для начала...

Рекурсивное создание словаря с типами и размерами файлов
Здравствуйте. Рекурсивно прохожу по директории. В словарь qmap записываю расширение файла, и его...

Создание нового потока из работающего потока
насколько это корректно? вроде всё нормально работает и именно так как задумывалось, но вопрос...

Рекурсивное создание папок
Здравствуйте! Задачи две: 1) Решил написать dll'ку с собственными функциями и процедурами,...

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

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

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


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

Добавлено через 35 секунд
так как мне тогда сделать так чтобы передавались разные значения параметра в поток?
0
go
Эксперт С++
3643 / 1375 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
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-u... s.85).aspx
1
14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223
03.02.2013, 17:46  [ТС] 5
Цитата Сообщение от go Посмотреть сообщение
CreateThread возвращает хендел, который вы почему-то не запоминаете.
просто это мое первое многопоточное приложение и хэндлы потоков пока еще не замарачиваюсь и не закрываю, приложение же когда убивается то и все описатели открытые тоже, но спасибо за напоминание!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.02.2013, 17:46

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

Рекурсивное создание UIView
Здравствуйте! Подскажите как сделать рекурсивное создание 15 UIView, каждая новая view должна...

Рекурсивное создание двусвязного списка
Как рекурсивно создать двусвязный список, например со значениями от 0 до max? На примере...

Рекурсивное создание однонаправленного списка з хвоста
Всем привет. Прошу помощи в решении задачи, я себе уже мозг сломал но не получается. И так...

Рекурсивное и не рекурсивное вычисление НОД
Здравствуйте! Имеется код вычисления НОД. Как сделать его рекурсивным и НЕ рекурсивным, и в чём...

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

Создание потока
Не могу понять как создать поток(( Напишите пример, в одном потоке чтобы было Label1-&gt;Caption=123;...


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

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

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