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

C++ занесение структур находящихся в разных потоках, в общую очередь - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Классы, матрицы, перегрузка операторов, дружественные функции http://www.cyberforum.ru/cpp-beginners/thread826559.html
Гляньте пожалуйста, как получилось сделать задание, что неверно: Создать класс, в котором перегрузить операторы: & для перемножения двух матриц; + для сложения двух матриц....
C++ Считать строку в массив символов, который является членом класса гетлайны, гетси, манипуляторы ws не работают (не могу заставить) #include <iostream> using namespace std; class employee { private: char name; long employee_id; http://www.cyberforum.ru/cpp-beginners/thread826549.html
C++ Напечатать все слова отличные от последнего и удовлетворяющие следующему свойству:
Задан текст, между словами пробел, за последним словом точка. Напечатать все слова отличные от последнего и удовлетворяющие следующему свойству: буквы слова упорядочены по алфавиту. Использовать...
Список списков C++
Как реализовать конструкцию списка списков? std::list <HWND> List; В этот список у меня попадают кнопки, по ним строится ломаная. Чтобы реализовать несколько ломаных мне нужен список в котором...
C++ Даны два массива А и В, получить массив C http://www.cyberforum.ru/cpp-beginners/thread826514.html
даны два массива А и В размером m*n, получить массив C=min(aij,bij)
C++ Быстрое преобразование Фурье Это пример на сайте wikipedia Быстрого Преобразование Фурье. Два вопроса. 1)Как получить массив анализируемых данных для wav файла. 2)Как получить массив анализируемых данных для захвата звука... подробнее

Показать сообщение отдельно
anmartex
...
1706 / 1199 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
03.04.2013, 09:52
Цитата Сообщение от Pavel1111 Посмотреть сообщение
фаил в который должно была вывести текстовая информация почиму то пустой
Не всегда :
Кликните здесь для просмотра всего текста
log.txt:
Код
Time of the request: Wed Apr 03 14:31:52 2013
id: 2
priority: 41
time output to a log: Wed Apr 03 14:31:52 2013
processing time: 0.000 second

Time of the request: Wed Apr 03 14:31:52 2013
id: 6
priority: 41
time output to a log: Wed Apr 03 14:31:52 2013
processing time: 0.000 second

Time of the request: Wed Apr 03 14:31:52 2013
id: 14
priority: 41
time output to a log: Wed Apr 03 14:31:52 2013
processing time: 0.000 second

Time of the request: Wed Apr 03 14:31:52 2013
id: 20
priority: 41
time output to a log: Wed Apr 03 14:31:52 2013
processing time: 0.000 second

Time of the request: Wed Apr 03 14:31:52 2013
id: 18
priority: 41
time output to a log: Wed Apr 03 14:31:52 2013
processing time: 0.000 second

Time of the request: Wed Apr 03 14:31:52 2013
id: 12
priority: 41
time output to a log: Wed Apr 03 14:31:52 2013
processing time: 0.000 second

Time of the request: Wed Apr 03 14:31:52 2013
id: 16
priority: 41
time output to a log: Wed Apr 03 14:31:52 2013
processing time: 0.000 second

Time of the request: Wed Apr 03 14:31:52 2013
id: 10
priority: 41
time output to a log: Wed Apr 03 14:31:52 2013
processing time: 0.000 second

Time of the request: Wed Apr 03 14:31:52 2013
id: 4
priority: 41
time output to a log: Wed Apr 03 14:31:52 2013
processing time: 0.000 second

Time of the request: Wed Apr 03 14:31:52 2013
id: 8
priority: 41
time output to a log: Wed Apr 03 14:31:52 2013
processing time: 0.000 second


Pavel1111, вы так лихо выполняете push в потоке без синхронизации, это и становится причиной такого поведения Если будите вводить 1, то всё будет работать.

Добавлено через 12 минут
А вот так будет всегда выполняться:
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <iostream>
#include <string>
#include <queue>
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <time.h>
 
#include <windows.h>
CRITICAL_SECTION cs;
 
using namespace std;
 
struct MYBYTE {   //приоритет запроса 0 – 255 (в нашем случае случайная величина)
    int priority;
    MYBYTE (int x = rand() % 255) : priority(x){}
};
 
struct MYDWORD {   //время формирования запроса и уникальный идентификатор клиента (в нашем случае не повторяемая случайная величина)
    string t;
    double start;
    static int quantity;
    int id;
    MYDWORD () {
        const time_t seconds = time(NULL);
        t = ctime(&seconds);
 
        start = clock();   //старт отсчета времени, для оценки продолжительности выполнения запос-отчет
 
        quantity += 1;
        id = quantity;
    }
};
int MYDWORD::quantity = 0;
 
typedef struct tagTDATA {
    MYBYTE cPriority; //приоритет запроса 0 – 255 (0 – наивысший приоритет)
    MYDWORD dwTicks; //время формирования запроса в системных тиках (Абсолютное значение времени, когда клиент добавляет запись в очередь)
    MYDWORD dwClientId; //уникальный идентификатор клиента
    char Data[255]; //абстрактные данные
} TDATA, *PTDATA;
 
class TDATA_comparison {
    public:
        bool operator() (const TDATA &lhs, const TDATA &rhs) const {
            return (lhs.cPriority.priority > rhs.cPriority.priority);
        }
};
 
typedef struct {
    priority_queue<TDATA, vector<TDATA>, TDATA_comparison> TDATA_queue;
} Pgueue;
 
void MThread( void* params ) {
    Pgueue * ptr = (Pgueue *)params;
    TDATA Client;
    EnterCriticalSection(&cs);
    ptr->TDATA_queue.push(Client);
    LeaveCriticalSection(&cs);
};
 
int main() {
    InitializeCriticalSection(&cs, 0);
    srand(time(NULL));
    cout << "Enter n (1 - 10): ";
    int n;
 
    for (cin >> n; n < 1 || n > 10; cin >> n) {
        if (!cin) {
            cin.clear();
            cin.sync();
        }
        cout << "Try again  (1 - 10): ";
    }
 
    Pgueue params;
 
    for ( int i = 0; i < n; i++ ) {
        _beginthread(MThread, 0, (void*)&params);
    }
 
    FILE *fp;
 
    if((fp = fopen("log.txt", "w")) == NULL) {
        cout << "Can not create file log.txt";
        exit(1);
    }
 
    while(!params.TDATA_queue.empty()) {
        TDATA Client = params.TDATA_queue.top();
        const time_t timer = time(NULL);
        double end;
        end = clock();
 
        fprintf(fp, "Time of the request: %s", Client.dwTicks.t.c_str());
        fprintf(fp, "id: %d\n", Client.dwClientId.id);
        fprintf(fp, "priority: %d\n", Client.cPriority.priority);
        fprintf(fp, "time output to a log: %s", ctime(&timer));
        fprintf(fp, "processing time: %.3f second\n\n", (end - Client.dwTicks.start) / ((double) CLOCKS_PER_SEC));
        params.TDATA_queue.pop();
    }
 
    fclose(fp);
 
    DeleteCriticalSection(&cs);
 
    return 0;
}
Бинарник + исходник: program.7z
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru