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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Классы, матрицы, перегрузка операторов, дружественные функции http://www.cyberforum.ru/cpp-beginners/thread826559.html
Гляньте пожалуйста, как получилось сделать задание, что неверно: Создать класс, в котором перегрузить операторы: & для перемножения двух матриц; + для сложения двух матриц. Память под матрицы отводить динамически. Предоставить конструктор копирования. Определить friend функции для операций ввода-вывода в поток. А вот что получилось:
C++ Считать строку в массив символов, который является членом класса гетлайны, гетси, манипуляторы ws не работают (не могу заставить) #include <iostream> using namespace std; class employee { private: char name; long employee_id; http://www.cyberforum.ru/cpp-beginners/thread826549.html
C++ Напечатать все слова отличные от последнего и удовлетворяющие следующему свойству:
Задан текст, между словами пробел, за последним словом точка. Напечатать все слова отличные от последнего и удовлетворяющие следующему свойству: буквы слова упорядочены по алфавиту. Использовать функции. (Плииз, программки нужны для Borland 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)Как получить массив анализируемых данных для захвата звука с микрофона. // AVal - массив анализируемых данных, Nvl - длина массива должна быть кратна степени 2. // FTvl - массив полученных значений, Nft - длина массива должна быть равна Nvl. подробнее

Показать сообщение отдельно
anmartex
...
1703 / 1196 / 495
Регистрация: 12.02.2013
Сообщений: 1,978
03.04.2013, 09:52     C++ занесение структур находящихся в разных потоках, в общую очередь
Цитата Сообщение от 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru