М
20 ноября 2017 г. 18:03

Многопоточность. Ошибки при обращении к переменной

QtConcurrent, многопоточность

Здравствуйте.
У меня 4 ядра процессора.
Вызываю несколько потоков функции:

QFuture<void> Perebor2 = QtConcurrent::map(Perebor, StrategyCod);
Функция при старте обращается к 6 массивам основного класса. В каждом массиве около 2 млн элементов.
При многопоточном запуске появляется ошибка.
Скажите пожалуйста, как решить вопрос с запросом данных из одного места?
2

Вам это нравится? Поделитесь в социальных сетях!

6
Evgenii Legotckoi
  • 21 ноября 2017 г. 1:37

С QtConcurent позже отвечу, запамятовал нюансы работы

    М
    • 21 ноября 2017 г. 12:48

    Как оказалось, вылетает на MainWindow w;
    Если переношу QMutex Mutex; выше MainWindow w; тоже вылетает.

    void StrategyCod(double Parametr) //код стратегии 
    {    
        MainWindow w;     
        QMutex Mutex; //мьютекст для блокировки данных для многопоточности    
        Mutex.lock();     
        QVector<double> Open=w.Open;     
        Mutex.unlock();
    }
      Evgenii Legotckoi
      • 21 ноября 2017 г. 14:32

      А зачем Вы каждый раз создаёте новый объект окна? Попробуйте сделать вашу задачу без класса, наследованного от QMainWindow. Вам нужно же только расчёты вынести в отдельный поток.

        М
        • 21 ноября 2017 г. 14:41

        Просто нужные мне данные хранятся в классе MainWindow. Их оттуда можно вынести, но это затрата лишних ресурсов. Хочу сделать пооптимизированней.

          Evgenii Legotckoi
          • 21 ноября 2017 г. 14:47

          Лучше вынести эти данные, такие классы работают в GUI потоке. Загрузку файлов, обработку и прочее делают отдельно от GUI потока Qt. Оптимизации ваш подход не даст... А если у Вас будет несколько потоков, то на каждый поток будет вызываться окно... забавная моргающая картинка из гирлянды окон будет.

            М
            • 21 ноября 2017 г. 15:14
            • (ред.)

            Не будет вызываться, оно вызывается ниже по коду. Но какая разница в каком классе хранить данные, если в этой функции я только их выгружаю.

            Но можно ли все таки выгружать данные из класса в потоки?

              Комментарии

              Только авторизованные пользователи могут публиковать комментарии.
              Пожалуйста, авторизуйтесь или зарегистрируйтесь