Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 14
1

Thread разбить программу в несколько потоков

16.10.2015, 00:13. Показов 1315. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Народ, такая проблема, написала программу, теперь нужно её разбить на несколько потоков. Но вот беда, не умею пользоваться thread-ом. Помогите пожалуйста разбить на несколько потоков
код:
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
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include<iostream>
using namespace std;
 
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    int m, i, k, n, l, j, q,w,ii;
    int a[1000];
    cin >> n >> m >> k >> l;                    //ввод данных
    for (i = 1; i <= n; i++) a[i] = i;          //распределение стартовых номеров
    
    for (q = 0; q < l; q++)
    {   
        k -= 1;
        if (k + m>n) k += m - n;else k += m;    //вычисление номера в ряду, который переходит в конец
        for (j = k; j < n; j++)
        {
            w = a[j];                           //
            a[j] = a[j + 1];                    //
            a[j + 1] = w;                       //сдвиг выбранного элемента в конец ряда
        }
        /*
        // проверка перестановки
        for (ii = 1; ii <= n; ii++)
        {
            cout << a[ii] << " ";               //вывод ряда в конце каждой перестановки
        }
        cout << "      "<<k<<endl;              //вывод выбранного элемента
        */
    }
    cout << a[n] << endl;
 
    system("pause");
    return 0;
}
Добавлено через 15 минут
а программу надо сдать уже завтра
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2015, 00:13
Ответы с готовыми решениями:

Разбить цикл на несколько потоков
Добрый день! Есть известный int N=10000, необходимо создать несколько потоков с циклами (for...

Разбить функцию на несколько потоков
Здравствуйте, помогите пожалуйста разобраться с одним вопросом: Имеется функция внутри которой 3...

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

Разбить программу на несколько файлов
Препод сказал вывести так чтобы функци была отдельно программа отдельно и файл вызова...

8
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
16.10.2015, 00:45 2
n_1396, Что должно идти в каком потоке?
0
0 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 14
16.10.2015, 01:04  [ТС] 3
javascript:insertnick('Mesteriis',641110);, нужно программу выполнить в нескольких потоках
есть такие наброски, но выдает ошибку
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
    
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения. 
// 
 
#include "stdafx.h" 
#include<iostream> 
#include<thread> 
using namespace std; 
 
void threadFunction( int &n, int &m, int &k, int &l) 
{ 
int i,j,q,w; 
int a[1000];
for (i = 1; i <= n; i++) a[i] = i; //распределение стартовых номеров 
 
for (q = 0; q < l; q++) 
{ 
k -= 1; 
if (k + m>n) k += m - n;else k += m; //вычисление номера в ряду, который переходит в конец 
for (j = k; j < n; j++) 
{ 
w = a[j]; // 
a[j] = a[j + 1]; // 
a[j + 1] = w; //сдвиг выбранного элемента в конец ряда 
} 
} 
 
} 
 
 
 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
int m, i, k, n, l, j, q,w,ii; 
int a[1000]; 
cin » n » m » k » l; //ввод данных 
/*for (i = 1; i <= n; i++) a[i] = i; //распределение стартовых номеров 
 
for (q = 0; q < l; q++) 
{ 
k -= 1; 
if (k + m>n) k += m - n;else k += m; //вычисление номера в ряду, который переходит в конец 
for (j = k; j < n; j++) 
{ 
w = a[j]; // 
a[j] = a[j + 1]; // 
a[j + 1] = w; //сдвиг выбранного элемента в конец ряда 
}*/ 
/* 
// проверка перестановки 
for (ii = 1; ii <= n; ii++) 
{ 
cout « a[ii] « " "; //вывод ряда в конце каждой перестановки 
} 
cout « " "«k«endl; //вывод выбранного элемента 
*/ 
} 
thread thr(threadFunction,ref(n), ref(m), ref(k), ref(l)); 
thr.join(); 
cout « a[n] « endl; 
 
system("pause"); 
return 0; 
}
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
16.10.2015, 01:57 4
n_1396, Потерял ты ветвление в написании функции

C++ (Qt)
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
#include <iostream>
#include <thread>
using namespace std;
 
void threadFunction( int &n, int &m, int &k, int &l)
    {
    int i,j,q,w;
    int a[1000];
    for (i = 1; i <= n; i++) a[i] = i; //распределение стартовых номеров
 
        for (q = 0; q < l; q++)
        {
            k -= 1;
            if (k + m>n) k += m - n;else k += m; //вычисление номера в ряду, который переходит в конец
            for (j = k; j < n; j++)
                {
                    w = a[j]; //
                    a[j] = a[j + 1]; //
                    a[j + 1] = w; //сдвиг выбранного элемента в конец ряда
                }
        }
    }
 
int main()
{
 
    int m, i, k, n, l, j, q,w,ii;
    w=q=j=i=ii=0; // объявлены но не использованны!!!
    int a[1000];
    cout << "Введите данные:\n";
    cout << "\t n = "; cin >>n;
    cout << "\t m = "; cin >>m;
    cout << "\t k = "; cin >>k;
    cout << "\t l = "; cin >>l;
   // cin >> n >> m >> k >> l; //ввод данных
 
    thread thr(threadFunction,ref(n), ref(m), ref(k), ref(l));
    thr.join();
    cout <<"\t|--------|\n";
    cout <<"\t     "<< a[n] << endl;
    return 0;
}
Вроде все работает

Добавлено через 40 секунд
И еще на 28 строчки переменные ты их объявил но не используешь, посмотри или убей их из текста или прикрути куданить!
1
0 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 14
16.10.2015, 02:18  [ТС] 5
http://https://pp.vk.me/c62322... hOWRDw.jpg
пожалуйста можете посмотреть тут, это блакскрин этой программы, там в ответе должна была выйти цифра от 1 до 5, но выходит -8656766554 почему то.

Добавлено через 46 секунд
никак не могу понять почему
0
0 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 14
16.10.2015, 02:20  [ТС] 6
вот вложение,javascript:insertnick('Mesteriis','-1');
Миниатюры
Thread разбить программу в несколько потоков  
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
16.10.2015, 13:55 7
n_1396, Вот чуял я что рано спать ушел) сори, считает не правильно скорей всего ошибка в формуле, кидай сюда условие если не поздно еще!
0
2 / 2 / 1
Регистрация: 07.03.2015
Сообщений: 34
16.10.2015, 14:11 8
Если что, при передачи функции другого потока - можно передать анонимную функцию, вот так:
C++
1
thread thr([] (параметр_1, параметр_2, ...) { действия }, аргумент_1, аргумент_2, ...);
Анонимные функции могут захватывать переменные, про это почитай в гугле. Так же можно указать тип возврата таким способом:
C++
1
[] () -> тип_возврата {}
C++
1
[] () -> int { return 5; }
По умолчанию - void.
0
0 / 0 / 0
Регистрация: 27.02.2015
Сообщений: 14
28.10.2015, 22:04  [ТС] 9
спасибо всем
0
28.10.2015, 22:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2015, 22:04
Помогаю со студенческими работами здесь

Программу с классами разбить на несколько файлов
Здравствуйте. Я учусь программировать на с++ и столкнулся с проблемой. Не могу найти как...

Разбить одну программу на несколько параллельно работающих
Я не программист, языка С++ не знаю. Написал ТЗ, по которому программисты что-то сваяли, недоваяли...

Создать программу которая создает несколько потоков и производит в них вычисления
Народ помогите создать программу которая создает несколько потоков и производит в них вычисления....

Замедление работы потоков если запущено несколько потоков
Есть отдельный поток который движет красным квадратом. Он каждую миллисекунду меняет положение...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru