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

Тормоза при создании потоков - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Извлечение корня н-ной степени из числа http://www.cyberforum.ru/cpp-beginners/thread634463.html
Здравствуйте!!! Тут задачка такая: нужно извлечь корень н-ной степени из числа методом деления отрезка пополам. Я реализовал такой код: #include <iostream> #include <cstdio> #include <cmath> using namespace std; const double EPS = 10E-12; int main()
C++ Программа общения между людьми с шифровкой даных Необходимо создать программу для общения между людьми..Также можно с шифровкой данных... http://www.cyberforum.ru/cpp-beginners/thread634460.html
C++ Освобождение памяти, выделенной под массив
Выделяю память под массив: int (*array_1) = new int; как освободить то, что выделил? И еще вопрос: как указателю **ptr_1 присвоить адрес указателя array_1
C++ Преобразование типов string->double c заданной точностью*?
Есть входящая строка 123456 или 00546.. или любая другая. Как преобразовать в тип double, чтобы на выходе я получил: 123.456 0.546 Язык с++
C++ Принцип наименьших привилегий http://www.cyberforum.ru/cpp-beginners/thread634452.html
Вопрос такой. Как строго следовать принципу наименьших привилегий? Например: стоит ли объявлять глобальные объекты со спецификатором static, даже если используется один файл; стоит ли передавать в функции константные указатели; стоит ли возвращать константные данные из функции? и т.д. Ни разу в кодах программы не видел строгого следования этому принципу, однако в книгах говорится иное. Или же...
C++ STL Containers Допустим есть проект Как сделать вектор растущим... насколько я понимаю это надо юзать resize() function мол VectorDoubles.resize(и тут типа число элементов ) Но вопрос такой... я вот не инициализировал никакое значение в VectorDoubles и начал push_back чить его в цикле и что то он у меня не ругается... т.е. он у меня из без кого растущий получается ??? или я не догоняю какой то момент... подробнее

Показать сообщение отдельно
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
07.08.2012, 22:24     Тормоза при создании потоков
вот код обрабртки клиента(только не надо мне говорить что это быдло код, сам знаю)))
код
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
DWORD WINAPI ThreadWorkClient(StructurClientData &data)
    {
        
        Sleep(100);
        char response[MAX_STRING_TMP_SEND];
        char *TempString=new char[MAX_STRING_TMP_SEND];
        char *TempStringPassword=new char[strlen(PASSWORD_CONNECT)+1];
        cipher((char*)PASSWORD_CONNECT,TempStringPassword,cipher_str);
        int counter_byte_recv=0;
        while((send(data.socket_client,cipher_str, size_cipher_str+1,0))==0){}
        while(1)
        {
            if((counter_byte_recv=recv(data.socket_client,TempString,MAX_STRING_TMP_SEND,0)) >0) //check password
            {
                TempString[strlen(PASSWORD_CONNECT)]=0;
                TempStringPassword[strlen(PASSWORD_CONNECT)]=0;
                if((strcmp(TempString,TempStringPassword))==0) // check
                {
                    strcpy(response,"will done");
                    send(data.socket_client,response,strlen(response)+1,0);
                    data.client_state=State_Client_Connect::authorization; ////////***** ok , not ready
                }
                else
                {
                    data.client_state=State_Client_Connect::atack; ///////////***** not
                    CounterClientAnConnect++;
                    closesocket(data.socket_client);
                    return 0;
                }
                while(1)
                {
                    if(( counter_byte_recv=recv(data.socket_client,TempString,MAX_STRING_TMP_SEND-1,0)) >0 ) //check readiness
                    {
                        if(strcmp(TempString,STRING_READY_CLIENT)) // check
                        {
                            data.client_state=State_Client_Connect::True_Authorization; //////****** ok , ready
                            CounterClientTruePassword++;
                            closesocket(data.socket_client);
                            return 0;
                        }
                    }
                }
                
            }
        }
        
    }
вот код пладящий потоки
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
    DWORD WINAPI ThreadNetworkAdminSystem(StructurNetworkAdminData &data)
    {
        StructurClientData *TmpClientData=new StructurClientData;
        int TmpCounterClient=0;
        while((TmpClientData->socket_client=accept(data.socket_admin,(sockaddr*)&TmpClientData->sockaddr_client.sin_addr.S_un.S_addr, &sockaddr_in_size)))
        {
                
                if(CounterClientAnConnect>0) //last launch in cicle ))
                { 
                    CounterClient-=CounterClientAnConnect;
                    for(int i=0,size=VectorClientData.size();i<size;i++)// scan all socket
                    {
                        if(VectorClientData[i].client_state==State_Client_Connect::atack) //delete atack`s socket
                        {
                            IteratorClientData=VectorClientData.begin();
                            IteratorClientData+=i;
                            VectorClientData.erase(IteratorClientData); // delete
                        }
                        
                    }
                }
                if(CounterClientTruePassword>0) //last launch in cicle ))
                { 
                    for(int i=0,size=VectorClientData.size();i<size;i++)// scan all socket
                    {
                        if(VectorClientData[i].client_state==State_Client_Connect::True_Authorization) //delete atack`s socket
                        {
                            CounterClientTruePassword--;
                            CloseHandle(VectorClientData[i].system_handle);
                            
                        }
                        
                    }
                }
                
                ////////////////////////////////////////////////////////////////////////////////
                TmpClientData->data_ip4=data.temp_sockaddr_client.sin_addr.S_un.S_addr;
                ////////////////////////////////////////////////////////////////////////////////
                CounterClient++;    //real counter
                TmpCounterClient++; //formation id , unreal counter
                ////////////////////////////////////////////////////////////////////////////////
                TmpClientData->system_handle=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)ThreadWorkClient,(LPVOID)TmpClientData,NULL,&TmpClientData->system_id);
                ////////////////////////////////////////////////////////////////////////////////
                VectorClientData.push_back(*TmpClientData);
                TmpClientData= new StructurClientData;
            
        }
        return 0;// not lauch ))
    }

проблема в том что после первого клиента нагрузка ЦП 50, после второго 90, после третьего 98-99, и потом тормоза дальше идут. вроде лишних потоков не создаётся и старые закрываю, в чём проблема???

Добавлено через 15 минут
нашёл решение - снижение приоритета сервера--админа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru