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

Самопроизвольное завершение потоков - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Paint с нуля http://www.cyberforum.ru/cpp/thread1384431.html
Помогите сделать самое простейшее приложение(чтобы можно было рисовать как в стандартном пеинте без всяких там вырезаний и копирований областей, тупо рисование) на Visual studio, я в этой проге не разбираюсь совсем..
C++ Разработка игры жанра платформер Привет всем. В общем, дело такое, на курсач надо сделать игру на объектно-ориентированном языке. Выбрал С++. Далее решил чтоб не заморачиваться в жанре игры выбрал платформер. И вот собственно вопрос: нужна прога, в которой будет удобно и уровень сформировать, и прописать механику объектов, а потом сохранить и исходники и скомпилированный файл. P.S. Смотрел на GameMaker, в принципе подходит, но... http://www.cyberforum.ru/cpp/thread1384336.html
C++ на координаты XOY
даны числа неравные друг другу x y
C++ даны числа неравные друг другу x,y. нужно найти мен6ьши
даны числа неравные друг другу x y
C++ Доделать программу автоматических ответов на ел. почту http://www.cyberforum.ru/cpp/thread1383653.html
Есть программа которая отвечает на ел. письма присланы с определенного сайта, нужно реализовать: 1. Работу с регулярными выражениями (c файлов - txt, doc, xls ) 2. Чтобы настройки на каждый почтовый ящик можно было сохранить, а потом просто выбирать вместо постоянного заполнения. 3. функцию ввода заголовка в программе. Пишите сроки и цену.
C++ Ошибка при delete Здравствуйте, вылетает такая ошибка, почему? Указатель верный, до этого места все нормально работает подробнее

Показать сообщение отдельно
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
02.03.2015, 12:22     Самопроизвольное завершение потоков
Цитата Сообщение от hiphone Посмотреть сообщение
С чем это связано
Наверное с тем, что потоки детачатся. Их надо как то отлавливать, пока все потоки не завершатся. Вот могу подкинуть свой учебный код для примера:
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 <iostream>
#include <string>
#include <thread>
#include <mutex>
#include <chrono>
#include <condition_variable>
 
std::mutex m;
std::condition_variable cv;
std::string data;
int num_thread = 10;
 
// просто функция, которая что то там вычисляет:
unsigned long long fib(std::size_t i) { return i < 3 ? 1 : fib(i - 1) + fib(i - 2); }
 
void work(unsigned i, unsigned thread_id)
{
   std::unique_lock<std::mutex> lk(m);
   std::cout << "Thread " << thread_id << " started...\n";
   lk.unlock();
 
   fib(i); // емулируем  нагрузку
 
   lk.lock();
   data += std::to_string(thread_id);
   --num_thread;
   std::cout << "Thread " << thread_id << " stopped...\n";
   cv.notify_one(); // маячим, что завершили работу
}
 
int main()
{
   for (std::size_t i = 0; i < num_thread; ++i)
   {
      std::thread t(work, 42, i+1);
      t.detach();
   }
 
   std::unique_lock<std::mutex> lk(m);
   // блокируем мютекс на 1 сек. и ждем когда последний поток промаячет нам
   // через notify_one(). При этом num_thread должно быть 0
   while(!cv.wait_for(lk, std::chrono::seconds(1), []{return num_thread == 0;}))
   {}
 
   std::cout << "All threads finished.\n";
   std::cout << "Data: " << data << "\n";
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru