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

Многопоточность в Windows - C++

Войти
Регистрация
Восстановить пароль
 
Winx64
0 / 0 / 0
Регистрация: 22.03.2013
Сообщений: 15
07.10.2013, 14:30     Многопоточность в Windows #1
Добрый день.
Помогите разобраться, в чем проблема. Уже 2 дня ломаю голову и ничего не получается. При компиляции выдается такая вот ошибка:

\main.cpp|29|error: too few arguments to function 'unsigned int Client(void*)'|
\main.cpp|71|error: at this point in file|

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
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <ctime>
#include <windows.h>
#include <process.h>
 
using namespace std;
 
 
typedef struct tagTDATA
{
     BYTE cPriority; //приоритет запроса 0 – 255 (0 – наивысший приоритет)
     DWORD dwTicks; //время формирования запроса в системных тиках
     DWORD dwClientId; //уникальный идентификатор клиента
     char Data[255]; //абстрактные данные
     bool operator > (tagTDATA ob){return cPriority > ob.cPriority;}
} TDATA, *PTDATA;
 
priority_queue<PTDATA, vector<PTDATA>, greater<PTDATA> > my_queue;
 
DWORD ID_Client = 1;
 
CRITICAL_SECTION cs;
 
HANDLE hEvent_client;
 
unsigned _stdcall Client(void*)
{
    DWORD dw = WaitForSingleObject(hEvent_client, INFINITE);
    switch(dw)
    {
        case WAIT_OBJECT_0:
            cout<<"Process good"<<endl;
            break;
 
        case WAIT_FAILED:
            cout<<"Ne pravilnuy  vuzov funkcii."<<endl;
            break;
    }
    DWORD ticks = GetTickCount();
    PTDATA Zapros_clienta = new TDATA;
 
    Zapros_clienta->cPriority = rand() % (255 - 1);
    LeaveCriticalSection(&cs);
    Zapros_clienta->dwClientId = ID_Client++;
    cout<<"Vvedite vushi dannue! \n";
    cin>>Zapros_clienta->Data;
    Zapros_clienta->dwTicks = GetTickCount() - ticks;
 
    EnterCriticalSection(&cs);
    my_queue.push(Zapros_clienta);
    cout<<"Zapisb v ochered "<<endl;
    cout<<"Priority = "<<(int)Zapros_clienta->cPriority<<endl;
    LeaveCriticalSection(&cs);
 
    SetEvent(hEvent_client);
}
class Terminal
{
 
public:
    friend unsigned _stdcall Client(void*);
    void RunThread();
};
 
void Terminal::RunThread()
{
    HANDLE my_thread;
    my_thread = (HANDLE)_beginthreadex(NULL,0,Client(),0,NULL);
}
//unsigned WINAPI Server(void*)
void Server()
{
    ofstream in;
    in.open("Log.txt");
    if(!in)
        cout<<"Log file open error\n";
    in << "cPriority" <<'\t'
        << "dwClientId" << '\t'
        << "dwTicks" << '\t'<< '\t'
        << "Data" <<'\n';
    while(!my_queue.empty())
    {
        in << (int)my_queue.top()->cPriority <<'\t'<<'\t'
        << my_queue.top()->dwClientId << '\t'<<'\t'
        << my_queue.top()->dwTicks << '\t'<<'\t'
        << my_queue.top()->Data <<'\n';
 
        my_queue.pop();
        if(my_queue.empty())
            cout<<"Log File write."<<endl;
        else
             cout<<"Log File not write."<<endl;
    }
}
 
int main()
{
    srand(time(NULL));
    InitializeCriticalSection(&cs);
    hEvent_client = CreateEvent(NULL,TRUE,TRUE,NULL);
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2013, 14:30     Многопоточность в Windows
Посмотрите здесь:

Многопоточность C++
C++ Многопоточность
C++ C++ и Многопоточность.
C++ Многопоточность
C++ Многопоточность
Многопоточность C++
Многопоточность C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.10.2013, 14:32     Многопоточность в Windows #2
try this one
C++
1
my_thread = (HANDLE)_beginthreadex(NULL,0,Client,0,NULL);
Winx64
0 / 0 / 0
Регистрация: 22.03.2013
Сообщений: 15
07.10.2013, 14:41  [ТС]     Многопоточность в Windows #3
Цитата Сообщение от Tulosba Посмотреть сообщение
try this one
C++
1
my_thread = (HANDLE)_beginthreadex(NULL,0,Client,0,NULL);
Теперь выдает ошибку:

c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\process.h|100|error: too few arguments to function 'long unsigned int _beginthreadex(void*, unsigned int, unsigned int (*)(void*), void*, unsigned int, unsigned int*)'
Убежденный
Системный программист
 Аватар для Убежденный
14473 / 6457 / 1020
Регистрация: 02.05.2013
Сообщений: 10,693
Завершенные тесты: 1
07.10.2013, 14:46     Многопоточность в Windows #4
Цитата Сообщение от Winx64 Посмотреть сообщение
Теперь выдает ошибку:
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\.. \..\include\process.h|100|error: too few arguments to function 'long unsigned int _beginthreadex(void*, unsigned int, unsigned int (*)(void*), void*, unsigned int, unsigned int*)'
Неужели так трудно открыть MSDN, заглянуть в доку по _beginthreadex и
увидеть, что она принимает шесть аргументов, а не пять ?
Убежденный
Системный программист
 Аватар для Убежденный
14473 / 6457 / 1020
Регистрация: 02.05.2013
Сообщений: 10,693
Завершенные тесты: 1
07.10.2013, 14:47     Многопоточность в Windows #5
C++
1
2
3
4
5
6
7
unsigned _stdcall Client(void*)
{
    //...
 
    LeaveCriticalSection(&cs);
    
    // ...
А в чем смысл начинать код с освобождения критической секции, которая
еще никем не захватывалась ?
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,056
Записей в блоге: 10
Завершенные тесты: 1
07.10.2013, 14:49     Многопоточность в Windows #6
Потому что передавать надо 6 параметров. Неужели сложно дагадаться что проблема в этом?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2013, 14:57     Многопоточность в Windows
Еще ссылки по теме:

C++ Многопоточность
Многопоточность в С++ C++
C++ 11 многопоточность C++
Многопоточность C++
C++ Многопоточность в C++ и C++11

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Winx64
0 / 0 / 0
Регистрация: 22.03.2013
Сообщений: 15
07.10.2013, 14:57  [ТС]     Многопоточность в Windows #7
Цитата Сообщение от Убежденный Посмотреть сообщение
А в чем смысл начинать код с освобождения критической секции, которая
еще никем не захватывалась ?
Это просто недосмотрел и забыл удалить код.

Добавлено через 2 минуты
Цитата Сообщение от Убежденный Посмотреть сообщение
Неужели так трудно открыть MSDN, заглянуть в доку по _beginthreadex и
увидеть, что она принимает шесть аргументов, а не пять ?
Спс за подсказку, что 6 параметров. А MSDN открывал смотрел. Но рание у меня было так:
C++
1
my_thread = (HANDLE)_beginthreadex(NULL,0,Client(),0,NULL,NULL);
и шестой параметр мне никак не помагал. когда исправил код на
C++
1
my_thread = (HANDLE)_beginthreadex(NULL,0,Client,0,NULL,NULL);
то стало все компилится.
Yandex
Объявления
07.10.2013, 14:57     Многопоточность в Windows
Ответ Создать тему
Опции темы

Текущее время: 21:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru