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

Ошибка при передаче двумерного массива в функцию std::thread - C++

Восстановить пароль Регистрация
 
red_square
2 / 2 / 2
Регистрация: 07.10.2013
Сообщений: 46
07.06.2014, 16:31     Ошибка при передаче двумерного массива в функцию std::thread #1
Здравствуйте! Написал программу на потоки, теперь нужно передать туда двумерный массив.
Пытаюсь передать по ссылке, но каждый раз выскакивает это сообщение:
error C2664: "void (int **,int,int)": невозможно преобразовать аргумент 1 из "int" в "int **"

Если кто-нибудь знает, как исправить, подскажите.
Заранее спасибо!

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
#include "stdafx.h"
#include <functional>
#include <stdio.h>
#include <thread>
#include <chrono>
#include <iostream>
#include <mutex>
#include <vector>
 
#define size 1000
 
int arr[size][size];
int sum;
int mid;
 
std::mutex                          g_lock;
std::mutex                          g_mutex;
std::vector<std::exception_ptr>     g_exceptions;
 
/* Функция, выполняющая поток */
void threadFunction(int** a, int begin_ct, int end_ct){
 
    std::cout << "Присоединяюсь к потоку " << std::this_thread::get_id() << std::endl;
    
    int z;
    int v;
    for (z = begin_ct; z <= end_ct; ++z){
        for (v = begin_ct; v <= end_ct; ++v){
            sum = sum + a[z][v];
        }
    }
    std::this_thread::sleep_for(std::chrono::seconds(rand() % 10));
    std::cout << "Покидаю поток " << std::this_thread::get_id() << std::endl;
 
}
 
/* Главная функция программы */
int _tmain(int argc, _TCHAR* argv[])
{
    int i;
    int j;
    /* Создание массива данных*/
    std::cout << "Программа находит среднее арифметическое двумерного массива из " << size << " x " << size<< " элементов";
    std::cout << "Статус программы:";
    for (i = 0; i <= size; i++){
        for (j = 0; j <= size; j++){
            arr[i][j] = rand() % (1000);
        }
    }
    std::cout << "Cоздание массива завершено";
 
    /* Создание потоков и передача данных в них*/
    std::thread thr1(threadFunction, std::ref(arr[i][j]), 0, size / 4);
    std::thread thr2(threadFunction, std::ref(arr[i][j]), size / 4, size / 2);
    std::thread thr3(threadFunction, std::ref(arr[i][j]), size / 2, 3 * size / 4);
    std::thread thr4(threadFunction, std::ref(arr[i][j]), 3 * size / 4, size);
 
    /* Присоединение к потокам */
    thr1.join();
    thr2.join();
    thr3.join();
    thr4.join();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2014, 16:31     Ошибка при передаче двумерного массива в функцию std::thread
Посмотрите здесь:

Трабл в передаче двумерного массива в функцию! C++
std::accumulate по столбцах двумерного массива C++
C++ Boost::thread vs std::thread
Ошибка при передаче двумерного массива в функцию C++
При передаче в функцию динамического массива, в массиве искажаются данные C++
C++ Мусор в элементах массива при передаче в функцию
Ошибка при создании потока std::thread C++
C++ Ошибка при передаче в функцию
Написать процедуру для суммирования матриц. Ошибка при передаче массива в функцию C++
C++ Ошибка при передаче двумерного массива в функцию
C++ Ошибка при передаче параметра в функцию
Выдает ошибку при передаче массива в функцию C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,056
Записей в блоге: 10
Завершенные тесты: 1
07.06.2014, 16:35     Ошибка при передаче двумерного массива в функцию std::thread #2
Ты передаешь в поток ссылку на элемент массива, а пытаешься получить двойной указатель.

Добавлено через 1 минуту
+ в 47-й строке выход за пределы массива.
red_square
2 / 2 / 2
Регистрация: 07.10.2013
Сообщений: 46
07.06.2014, 16:39  [ТС]     Ошибка при передаче двумерного массива в функцию std::thread #3
Спасибо за ответ! Теперь я передаю не элемент массива, а весь массив( std::ref(arr) ), но выдаёт уже другую ошибку: "error C2090: функция возвращает массив". Как её устранить?
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,056
Записей в блоге: 10
Завершенные тесты: 1
07.06.2014, 16:53     Ошибка при передаче двумерного массива в функцию std::thread #4
Попробуй убрать std::ref.
Yandex
Объявления
07.06.2014, 16:53     Ошибка при передаче двумерного массива в функцию std::thread
Ответ Создать тему
Опции темы

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