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

Разбить на потоки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не определен random() и randomize() http://www.cyberforum.ru/cpp-beginners/thread1655945.html
Насколько я знаю эти функции находятся в stdlib.h , он подключен почему выскакивает ошибка? #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <time.h> int zn() { return...
C++ В заданной действительной матрице указать индексы элемента, удовлетворяющего условию Дана действительная матрица размером n×m, все элементы которой различны. В каждой строке выбирается элемент с наименьшим значением, затем среди этих чисел выбирается наибольшее. Указать индексы... http://www.cyberforum.ru/cpp-beginners/thread1655943.html
C++ Это опечатка такая в книжке?
Читаю Б.Му, Липпман и прочие товарищи. Вот пример(как бэ ожидалось что ошибки будут в вариантах ответов) struct Base { foo(int)///??????? protected: int bar; double foo_bar; }; struct...
C++ Получить список открытых в браузере вкладок
Здравствуйте всем) Нужно получить список открытых (или хотя бы активной) вкладки браузера, т.е. URL и, желательно, название вкладки (например в браузере Firefox). Если не список, то хотя бы...
C++ Ошибка на этапе выполнения быстрой сортировки http://www.cyberforum.ru/cpp-beginners/thread1655931.html
Ошибка а не пойму в чем,код здеясь:#include<iostream> using namespace std; void main(){ setlocale(LC_ALL, "Ukrainian"); int ar; for (short i = 0; i < 11; i++) { ar = rand(); cout <<...
C++ Дана строка. Подсчитать самую длинную последовательность подряд идущих букв а Дана строка. Подсчитать самую длинную последовательность подряд идущих букв а. подробнее

Показать сообщение отдельно
ikudesnik
0 / 0 / 0
Регистрация: 02.08.2015
Сообщений: 122

Разбить на потоки - C++

05.02.2016, 21:31. Просмотров 254. Ответов 4
Метки (Все метки)

Есть программа рабочая:
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
#include "stdafx.h"
#include <cctype>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <locale>
using namespace System;
 
const int row = 26;
const int col = 26;
const int len = 3;
char mas[row][col][len];
char mas_ascii[256];
 
int main() 
{
      std::locale current_locale("");
      std::locale::global(current_locale);
 
    for (int i=0; i<row; i++)
        for (int j=0; j<col; j++)
        {
            mas[i][j][0] = i+'A';
            mas[i][j][1] = j+'A';
            mas[i][j][2] = '\0';
        }
 
        // Выводим на экран таблицу шифрования
 /* 
    for (int i=0; i<row; i++)
    {
        for (int j=0; j<col; j++)
            std::cout<<mas[i][j]<<" ";
        std::cout<<std::endl;
    }
*/
 
    //Заполняем таблицу с символами ASCII
     for (int i = 0; i < 256; ++i)
        {   
            mas_ascii[i] = Convert::ToChar(i);
        }
    //Выводим на экран массив ascii
/* 
    for (int i = 0; i < 256; ++i)
    {
    std::cout << i << " " << mas_ascii[i]<< std::endl;
    }
*/
 
 
    //Открываем файл для чтение исходного текста
    std::vector <std::string> str;
    std::string buff;
    std::ifstream ifs("in.txt", std::ios_base::binary);
    if (!ifs) std::cout << "Unable to open file in.txt" << std::endl;  
 
    while (getline(ifs, buff))
        {   
            str.push_back(buff);
        }   
 
/*
    for (int i = 0; i < str.size(); i++)
        {
            std::cout << str[i];
        }
    std::cout << std::endl;
*/
    std::vector <std::string> strresult;
    //Открваем файл для записи шифрованного текста
    std::ofstream ofs("out.txt");
    if(ofs.is_open())
    {       
        for (int i = 0; i < str.size(); i++)
            {
                std::string a = str[i];
                for(int k = 0; k < a.size(); ++k)
                {
                    for (int j = 0; j < 256; j++)
                    {
                        if(a[k]==mas_ascii[j])
                        {
                            int jx=j;
                            int xx = jx/26;
                            int yx = jx%26;
                            ofs << mas[xx][yx];                        
                            strresult.push_back(mas[xx][yx]); 
                        }  
                        
                    }
                }
            }
 
        for (int i = 0; i < strresult.size(); i++)
            {
                std::cout << strresult[i];
            }
        std::cout << std::endl;
        ofs.close();
    }
    else
        std::cerr << "Unable to open file out.txt" << std::endl;
    std::system("pause");
    return 0;
}
Хочу разбить на потоки:
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
// ConsoleApplication4.cpp: главный файл проекта.
 
#include "stdafx.h"
#include <cctype>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <locale>
#include <pthread.h>
using namespace System;
 
const int row = 26;
const int col = 26;
const int len = 3;
char mas[row][col][len];
char mas_ascii[256];
 
std::vector <std::string> *strresult;
std::vector <std::string> str;
 
struct bound { int begin ; int end ; } ;
 
void *crypto (void *param)
 
{
 
 
bound *b = (bound *)param ;
 
for (int i = b->begin; i < b->end; i++)
            {
                std::string a = str[i];
                for(int k = 0; k < a.size(); ++k)
                {
                    for (int j = 0; j < 256; j++)
                    {
                        if(a[k]==mas_ascii[j])
                        {
                            int jx=j;
                            int xx = jx/26;
                            int yx = jx%26;                       
                            strresult.push_back(mas[xx][yx]); 
                        }  
                        
                    }
                }
            }
return (void *) strresult; //возвращение результата
}
 
 
 
int main() 
{
      std::string buff;
      std::vector <std::string> *str1;
      std::vector <std::string> *str2;
      bound b ; //границы вычислений для первого потока
      bound c ; //границы вычислений для второго потока
 
 
 
      std::locale current_locale("");
      std::locale::global(current_locale);
 
    for (int i=0; i<row; i++)
        for (int j=0; j<col; j++)
        {
            mas[i][j][0] = i+'A';
            mas[i][j][1] = j+'A';
            mas[i][j][2] = '\0';
        }
 
        // Выводим на экран таблицу шифрования
 /* 
    for (int i=0; i<row; i++)
    {
        for (int j=0; j<col; j++)
            std::cout<<mas[i][j]<<" ";
        std::cout<<std::endl;
    }
*/
 
    //Заполняем таблицу с символами ASCII
     for (int i = 0; i < 256; ++i)
        {   
            mas_ascii[i] = Convert::ToChar(i);
        }
    //Выводим на экран массив ascii
/* 
    for (int i = 0; i < 256; ++i)
    {
    std::cout << i << " " << mas_ascii[i]<< std::endl;
    }
*/
 
 
    //Открываем файл для чтение исходного текста
    
    
    std::ifstream ifs("in.txt", std::ios_base::binary);
    if (!ifs) std::cout << "Unable to open file in.txt" << std::endl;  
 
    while (getline(ifs, buff))
        {   
            str.push_back(buff);
        }   
 
/*
    for (int i = 0; i < str.size(); i++)
        {
            std::cout << str[i];
        }
    std::cout << std::endl;
*/  
    
    pthread_t thread1, thread2;
    b.begin = 0;
    b.end = str.size()/2 ;
    pthread_create(&thread1,NULL,crypto,(void *)&b);
    c.begin = str.size()/2+1;
    c.end = str.size();
    pthread_create(&thread2,NULL,crypto,(void *)&c);
 
    pthread_join(thread1,(void **)&str1);
    pthread_join(thread2,(void **)&str2);
 
    //Открываем файл для записи шифрованного текста
    std::ofstream ofs("out.txt");
    if(ofs.is_open())
    {       
        
        /*for (int i = 0; i < strresult.size(); ++i)
            {
                ofs << strresult[i];
            }
 
        for (int i = 0; i < strresult.size(); i++)
            {
                std::cout << strresult[i];
            }*/
 
        std::cout << std::endl;
        ofs.close();
    }
    else
        std::cerr << "Unable to open file out.txt" << std::endl;
    delete str1; delete str2 ;
    std::system("pause");
 
    
    return 0;
}
Действую по аналогу:
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
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
int A[100], B[100] ; //два вектора
struct bound //структура, определяющая границы вычислений потоков
{ int begin ; int end ; } ;
//стартовая функция для обоих порожденных потоков
void * func (void *param)
{
bound *b = (bound *)param ; //преобразование из void* в bound*
int *sum ; //скалярное произведение
sum = new int ;
int i ; //счетчик для цикла
//вычисление скалярного произведения
for (i=b->begin, *sum=0 ; i<b->end ; i++) *sum += A[i]*B[i] ;
return (void *)sum ; //возвращение результата
}
int main()
{
int i ; //счетчик для цикла
int *sum1 ; //для получения результата вычислений первого потока
int *sum2 ; //для получения результата вычислений второго потока
bound b ; //границы вычислений для первого потока
9
bound c ; //границы вычислений для второго потока
for (i=0 ; i<100 ; i++)
{ //заполнение массивов А и В случайными числами от 0 до 10
A[i] = (int)(random()/(RAND_MAX/10)) ;
B[i] = (int)(random()/(RAND_MAX/10)) ;
}
//идентификаторы для созданных потоков
pthread_t thread1, thread2 ;
b.begin = 0 ; b.end = 50 ;
//создание первого потока, производящего вычисления от 0 до 50
pthread_create(&thread1,NULL,func,(void *)&b) ;
c.begin = 50 ; c.end = 100 ;
//создание первого потока, производящего вычисления от 50 до 100
pthread_create(&thread2,NULL,func,(void *)&c) ;
//ожидание завершения первого потока, в sum1 записывается адрес
//результата вычислений первого потока
pthread_join(thread1,(void **)&sum1) ;
//ожидание завершения второго потока
pthread_join(thread2,(void **)&sum2) ;
fprintf(stdout,"Скалярное произведение = %d",*sum1+*sum2) ;
delete sum1 ; delete sum2 ;
return 1 ;
}
Возникла проблемка :
C++
1
strresult.push_back(mas[xx][yx]);  // выражение должно иметь тип класса.
Может я вообще не то делаю, пожалуйста подскажи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru