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

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

Войти
Регистрация
Восстановить пароль
 
Horrorous
0 / 0 / 0
Регистрация: 13.04.2009
Сообщений: 38
#1

Потоки - C++

22.04.2010, 03:26. Просмотров 429. Ответов 1
Метки нет (Все метки)

Доброго времени суток!

Задание такое

Создание списка слов отсортированных по алфавиту (выбрать алгоритм с возможностью параллельного исполнения);

вот код, уже сбился с ног ища в чем ошибка, все надо реализовать с использованием потоков

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include "stdafx.h"
 
char array[20][11];
int flag = 1;
CRITICAL_SECTION CriticalSection; 
HANDLE hMutex;
 
 
DWORD WINAPI MyThreadFun1(PVOID _pParam)
{
    int *l = (int*)_pParam, i = *l;
 
 
    WaitForSingleObject(hMutex, INFINITE);
    if(strcmp(array[i],array[i+1])>0)
        {
            char buffer[11];
            strcpy(buffer,array[i]);
            strcpy(array[i],array[i+1]);
            strcpy(array[i+1],buffer);
            flag = 1;
        } 
 
    ReleaseMutex(hMutex);
    return 0;
}
 
 
//DWORD WINAPI MyThreadFunMutex(PVOID _pParam)
//{
//  int *n = (int*)_pParam,
//      j = *n;
//
//
//  WaitForSingleObject(hMutex, INFINITE);
//  // Вот сдесь синхронизпация
//  Sleep(2000);
//  ++(*n);
//  printf(" %d ", *n);
//
//  ReleaseMutex(hMutex);
//
//  return 0;
//}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int *n = new int(), *n2 = new int();
    char str[101]; 
    printf("Vvedite slova: "); 
    gets(str);
    
    int count = 0; 
    char *ptr = strtok(str,"\t ");
    for(count=0; ptr!=NULL; count++)
    {
        strcpy(array[count], ptr);
        ptr = strtok(NULL,"\t ");
    }
    printf("%d\n", count);
    const int l = count;
 
    HANDLE hThreads[7];
    HANDLE hMutex = ::CreateMutex(NULL, FALSE, NULL);
 
    LARGE_INTEGER freq;
    QueryPerformanceFrequency(&freq);
 
    LARGE_INTEGER time1;
    QueryPerformanceCounter(&time1);
 
    while(flag){   
    flag = 0; 
    for(int i = 0;i<count-1;i++){
        hThreads[i] = ::CreateThread(NULL, 0, MyThreadFun1, n, 0, NULL);}
    }
 
    for(int i = 0;i<count-1;i++)
    {
        WaitForSingleObject(hThreads[i], INFINITE);
        CloseHandle(hThreads[i]);
    }
 
 
    LARGE_INTEGER time2;
    QueryPerformanceCounter(&time2);
    time2.QuadPart -= time1.QuadPart;
 
double span = (double) time2.QuadPart / freq.QuadPart;
printf("Time: %f ns\n", span*1000000000);
 
    strcpy(str,"");
    for(int i=0;i<count;i++)
    {
        strcat(str,array[i]);
        strcat(str," ");
    }
    puts("Result: \n"); puts(str);
    int c;
    scanf("%d", &c);
 
 
 
 
 
    //сюда пока не лезть
    /*HANDLE hThread;
 
    hThread = ::CreateThread(NULL, 0, MyThreadFun, n, 0, NULL);
 
    WaitForSingleObject(hThread, INFINITE);
 
    CloseHandle(hThread);
 
    HANDLE hThreads[10];*/
 
    /*hMutex = ::CreateMutex(NULL, FALSE, NULL);
    
    for (int i = 0; i < 10; i++)
        hThreads[i] = ::CreateThread(NULL, 0, MyThreadFunMutex, n, 0, NULL);
 
    for (int i = 0; i < 10; i++)
    {
        WaitForSingleObject(hThreads[i], INFINITE);
        CloseHandle(hThreads[i]);
    }*/
 
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2010, 03:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Потоки (C++):

Что такое потоки ввода, потоки вывода? - C++
Здарова всем! Не так давно уже прогаю на С++ и все НИКАК не могу понять, что такое потоки ввода, потоки вывода..! вот допустим...

Потоки - C++
В процессе выполнения задачи возникла проблема чтения объектов из потока и сохранения их в массив: cout &lt;&lt; &quot;Rasstojanie = &quot; &lt;&lt; xx...

Потоки - C++
Помогите,пожалуйста!Написать программу, которая считывает текст из файла и выводит на экран только предложения, начинающиеся с тире, перед...

Потоки - C++
Задание: 1.Отображение списка запущенных потоков. 2.Создание нового потока по запросу пользователя.(это у меня сделано и работает) ...

Потоки с++ - C++
Как средствами с++ реализовать параллельную работу с документами? Т.е. чтобы можно было одновременно работать с несколькими файлами (искать...

потоки.. - C++
Доброго всем времени суток. При написании программы я столкнулся с проблемой, решение которой, по словам друзей, лежит в потоках. проблема...

1
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
22.04.2010, 09:57 #2
C++
1
2
HANDLE hMutex;
 HANDLE hMutex = ::CreateMutex(NULL, FALSE, NULL);
Почему вы создаете mutex 2 раза?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2010, 09:57
Привет! Вот еще темы с ответами:

Потоки - C++
Я создаю поток так: CreateThread(NULL, 0, MyThread, (LPVOID)&amp;param, 0, NULL); Но мне нужно обработать 100 раз функцию MyThread. 100...

потоки с++ - C++
добрый вечер !нужно проверить мою программу с потоками. переделала, но что-то не так( закомменченная программа, моя на основе которой...

Потоки - C++
Здравствуйте, помогите пожалуйста преподаватель сказал нужно добавить код в третьем потоке(thread3), чтобы событие не происходила пока не...

Потоки - C++
Пару вопросов про потоки... 1. Открывается поток, в нем запускается еще один... потоки отсоединяются, как закрыть дочерний поток когда...


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

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

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