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

Добыча золота в варкрафт - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Кнопка Enter в командной строке нажимается по 2 раза http://www.cyberforum.ru/cpp/thread1143449.html
Здравствуйте. Есть программа для записи/чтения тесктовых файлов, написана на си++ в Visual. Такое ощущение как будто при нажатии на кнопку enter в программе она нажимается 2 раза. То есть захожу...
C++ Создание блоков в коде Пишу в Visual Studio 2013. Есть ли в с++ возможность создания блоков #region как в c# , или какие-нибудь аналоги? http://www.cyberforum.ru/cpp/thread1143038.html
Общий, с чего начать C++
В последнее время не могу понять, что стоит изучить, да и вообще потерял слегка интерес к программированию, хотя раньше очень любил это. В колледже по программе мы прошли не особо много, азы: типо...
C++ Программное обеспечение для Аудиографа
Доброго времени суток! Собственно сразу к делу. Есть проект по разработке устройства для измерения остроты слуха, который делится на 2 части, 1-я касается разработки аппаратной части, а 2-я...
C++ Код подключения к MS SQL http://www.cyberforum.ru/cpp/thread1140497.html
Здравствуйте. Возможно вопрос покажется совсем уж тупым, но пожалуйсто ответте, ибо никак не могу решить проблему, а сроки поджимают. Имеется некторый MSSQL Server, который находится по адресу,...
C++ Измерить кол-во тактов процессора Здравствуйте. Подскажите, пожалуйста, каким способом можно измерить количество тактов (или время с точностью до наносекунд), затраченное на выполнение программы (или отдельного участка кода)?... подробнее

Показать сообщение отдельно
stima
485 / 337 / 38
Регистрация: 22.03.2011
Сообщений: 1,079
Завершенные тесты: 2
10.04.2014, 02:10
Во первых
задерживаясь в пути на случайное время
эти задержки должны быть разбиты на интервалы или это одна задержка? Путь это туда и обратно, или это не важно?

Во вторых
Написать программу работы одного юнита.
это как? Подразумевается ли что могут быть запущенны другие программы для других юнитов?, но где тогда "находится шахта" (если спроецировать на реализацию это может быть как шаренный файл, пайп, так и сервер в конце концов)? Может подразумевалось написать программу для эмулирующую работу шахты и N юнитов.

Во третьих fork поможет лишь в том случае, если Вы сделаете общей "шахту" для всех порожденных процессов.
В четвертых, зачем Вы добавляете если Вам нужно вычитать?

Ну и в последних, если все таки подразумевалось смоделировать рабочий процесс для N юнитов в одном приложении, где не важно путь и будет ли остановка одна или разбита, а целью стоит лишь параллельность выполнения, то ниже приведен код, так как я это вижу, в стандарте c++11 (g++ my_file_name.cpp -std=c++11)
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
#include <ctime>
#include <mutex>
#include <thread>
#include <chrono>
#include <vector>
#include <string>
#include <sstream>
#include <iostream>
 
int total_gold = 0;
int units_count = 0;
static const int unit_gold = 10;
 
std::mutex unit_mutex, cout_mutex;
 
void print(const std::string& msg)
{
    //just avoid interlaced out
    std::unique_lock<std::mutex> locker(cout_mutex);
    std::cout << msg << std::endl;
}
 
void unit_routine(int unit_id)
{
    print("unit " + std::to_string(unit_id) + " start his task");
    for ( ;; )
    {
        {
            std::unique_lock<std::mutex> locker(unit_mutex);
            if (total_gold < unit_gold)
            {
                total_gold = 0;
            }
 
            if (total_gold == 0)
            {
                print("no more gold! unit " + std::to_string(unit_id) + " finished ");
                break;
            }
 
            total_gold -= unit_gold;
            print(std::string("current amount of gold: ")  + std::to_string(total_gold));
        }
        std::this_thread::sleep_for(std::chrono::milliseconds(rand() % 100));
    }
}
 
int main()
{
    srand(unsigned int(time(nullptr)));
 
    std::cout << "Enter total gold: ";
    std::cin >> total_gold;
    std::cout << std::endl;
 
    std::cout << "Enter units count: "; 
    std::cin >> units_count;
    std::cout << std::endl;
 
    std::vector<std::thread> thread_group;
    for (int i = 0; i < units_count; ++i)
    {
        thread_group.push_back(std::move(std::thread(unit_routine, i)));
    }
 
    for (auto it = thread_group.begin(); it != thread_group.end(); ++it)
    {
        it->join();
    }
 
    std::cin.get();
    std::cin.get();
 
    return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru