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

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)Как получить массив анализируемых данных для захвата звука... подробнее

Показать сообщение отдельно
Pavel1111
0 / 0 / 0
Регистрация: 18.06.2012
Сообщений: 9

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

03.04.2013, 08:31. Просмотров 479. Ответов 4
Метки (Все метки)

Весь код приводить не стал, надеюсь идея будет понятна. Я циклом создал потоки а теперь, нужно структуры (Clien), которые в этих потоках создались засунуть в очередь. Как это сделать??? а то у меня вообще никаких идей нет..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
......
void MThread( void* pParams ) {
    TDATA Client;
};
......
 
int main() {
.....
priority_queue<TDATA, vector<TDATA>, TDATA_comparison> TDATA_queue;
    
    for ( int i = 0; i < 5; i++ ) {
        _beginthread(MThread, 0, NULL);
        
        TDATA_queue.push(Client);   //вот с помощю push я и должен все мои структуры внести в очередь
    }
......
}
Добавлено через 41 минуту
а можно в поток передать указатель на очередь?

Добавлено через 4 часа 52 минуты
Я врое разобрался, но вот неприятность, фаил в который должно была вывести текстовая информация почиму то пустой, гляньте пожалуйста код!!! Очень нужно сегодня отдать...
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
#include <iostream>
#include <string>
#include <queue>
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <time.h>
 
using namespace std;
 
struct BYTE {   //приоритет запроса 0 – 255 (в нашем случае случайная величина)
    int priority;
    BYTE (int x = rand() % 255) : priority(x){}
};
 
struct DWORD {   //время формирования запроса и уникальный идентификатор клиента (в нашем случае не повторяемая случайная величина)
    string t;
    double start;
    static int quantity;
    int id;
    DWORD () {
        const time_t seconds = time(NULL);
        t = ctime(&seconds);
 
        start = clock();   //старт отсчета времени, для оценки продолжительности выполнения запос-отчет
 
        quantity += 1;
        id = quantity;
    }
};
int DWORD::quantity = 0;
 
typedef struct tagTDATA {
    BYTE cPriority; //приоритет запроса 0 – 255 (0 – наивысший приоритет)
    DWORD dwTicks; //время формирования запроса в системных тиках (Абсолютное значение времени, когда клиент добавляет запись в очередь)
    DWORD 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;
    ptr->TDATA_queue.push(Client);
};
 
int main() {    
    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);
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.