С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/12: Рейтинг темы: голосов - 12, средняя оценка - 4.83
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2

Некорректный запуск потоков с IdHTTP

22.07.2014, 22:34. Показов 2479. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Поддержите пожалуйста с реализацией потоков.

Задача: запустить в N потоков загрузки страниц по имеемым параметрам с помощью компонента IdHTTP, количество загружаемых страниц M и N<<M.
Условия:
- использовать потоки типа Thread
- количество потоков должно вводиться с клавиатуры (не более 500)
- используется https:\\
- на форме находится компоненты IdSSLIOHandlerSocketOpenSSL, IdHTTP, ListBox (основные)
- результат обработки страниц должен отображаться в ListBox из потоков.

Я раздробил программу на 3 части:
1) форма с вызовом потока который циклом вызывает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
    : TForm(Owner)
{
        //настройки IdHTTP1
    IdHTTP1->Request->UserAgent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0";
    IdHTTP1->Request->Accept="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
    IdHTTP1->Request->AcceptLanguage="ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3";
    IdHTTP1->Request->ContentType="application/x-www-form-urlencoded;";
    IdHTTP1->Request->Connection= "keep-alive";
    IdHTTP1->Request->Host= "auth.mail.ru";
    ListBox2->Items->LoadFromFile("seach.txt");
    z2->LoadFromFile("seach.txt");
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender) //по кнопке запускается поток циклического запуска
{
    Start *Thr2 = new Start(true); 
    Thr2->Resume();
    Thr2->FreeOnTerminate = true;
}
2) поток циклического вызова
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
extern TStringList *z;
int j=0;
String POLE;
__fastcall Start::Start(bool CreateSuspended)
    : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall Start::Execute()
{
    for(int i=0;i<z->Count;i++)
    {
        if(j<=100)//проверка освобождения потока потоков выставлено меньше или равно 100
        {
            j++;
            POLE=z->Strings[i]; //загружаю параметры
            Potok *Thr = new Potok(true);
            Thr->Resume();
            Thr->FreeOnTerminate = true;
 
        }
        else {i--;}
    }
}
3) поток загрузки и обработки страниц
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
void __fastcall Potok::Execute()
{
        TStringStream *SZ= new TStringStream();
        TStringStream *SL= new TStringStream();
        TIdHTTP* IdHTTP2= new TIdHTTP(NULL) ; //Динамически создаю
        TIdSSLIOHandlerSocketOpenSSL* TIdSSLIOHandlerSocketOpenSSL2 =new TIdSSLIOHandlerSocketOpenSSL(NULL); //Динамически создаю
 
        IdHTTP2->Request->UserAgent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0";
        IdHTTP2->Request->Accept="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        IdHTTP2->Request->AcceptLanguage="ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3";
        IdHTTP2->Request->ContentType="application/x-www-form-urlencoded;";
        IdHTTP2->Request->Connection= "keep-alive";
        IdHTTP2->Request->Host= "auth.mail.ru";
 
        IdHTTP2->HandleRedirects=true;
        IdHTTP2->IOHandler=TIdSSLIOHandlerSocketOpenSSL2;
 
        SL->Clear();
        String Domain,Login,Pas;
        Domain="Domain="+POLE.SubString(Pos("@",POLE)+1,Pos(";",POLE)-1-Pos("@",POLE));
        Login="&Login="+POLE.SubString(1,Pos("@",POLE)-1);
        Pas="&Password="+POLE.SubString(Pos(";",POLE)+1,POLE.Length()-Pos(";",POLE));
        SL->WriteString(Domain);
        SL->WriteString(Login);
        SL->WriteString(Pas);
 
        String Text;
        Text= "https://auth.mail.ru/cgi-bin/auth";
        IdHTTP2->Post(Text,SL);
        Text="https://e.mail.ru/messages/inbox/?back=1";
        IdHTTP2->Post(Text,SL,SZ);
        String Sovpad;
////////////////////////////////////////////////////////////////////////////////////////// 
               //[B]тут происходит переполнение памяти[/B]
        for(int i=0;i<z2->Count;i++)
        {
            if(SZ->DataString.Pos(z2->Strings[i]))Sovpad+=z2->Strings[i]+",";
        }
        if(Sovpad.Pos(","))Form2->ListBox1->Items->Add(POLE +" --- "+ Sovpad);
//////////////////////////////////////////////////////////////////////////////////////////
        if(Form2->ListBox1->Count!=0)Form2->ListBox1->ItemIndex=Form2->ListBox1->Count-1;
        Form2->ProgressBar1->Position=Form2->ProgressBar1->Position+1;
        Form2->Edit2->Text=Form2->ProgressBar1->Position;
        Form2->Edit3->Text=StrToInt(Form2->Edit1->Text)-Form2->ProgressBar1->Position;
        j--;
        delete IdHTTP2,TIdSSLIOHandlerSocketOpenSSL2;
        delete SZ,SL;
}
Подскажите пжл где я накосячил и что не так делаю
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.07.2014, 22:34
Ответы с готовыми решениями:

Некорректный запуск windows 8.1
Некорректный запуск windows 8.1. Обновил с 8 неделю назад. Теперь такая проблема. При загрузке появляется ненадолго синий экран с надписью...

Некорректный запуск программы
хэлп Дописываю программу, возникли сложности при запуске программы и ввода данных в таблицу при вводе значений выводит такую ошибку:

Некорректный запуск exe в VS 2013
Добрый вечер. Подскажите. Есть программа, написанная в visual studio 2013. Когда я открываю проект в этой среде и запускаю программу, то...

16
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
22.07.2014, 23:20
Вот когда то писал загрузку картинок в несколько потоков.

Это передача ссылок откуда грузить
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
void __fastcall TForm1::Button1Click(TObject *Sender) {
    TStringList * SL = new TStringList;
 
    SL->Add(
        "http://img0.joyreactor.cc/pics/post/full/anon-art-%D0%BA%D1%80%D0%B0%D1%81%D0%B8%D0%B2%D1%8B%D0%B5-%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BA%D0%B8-%D1%84%D0%BE%D1%82%D0%BE-848890.jpeg");
    SL->Add(
        "http://upload.wikimedia.org/wikipedia/commons/f/f3/%D0%A4%D0%BE%D1%82%D0%BE_%D0%BA%D1%83%D0%BD%D0%BE%D0%B2.jpg");
    SL->Add("http://cs617422.vk.me/v617422519/d9a7/9U_EOqjXXt8.jpg");
    SL->Add("http://cs620917.vk.me/v620917519/4dc5/I8MbJ8_UCsE.jpg");
    SL->Add(
        "http://bestfotoposter.ru/downloads/givotnie/16017x10677-96dpi.jpg");
    SL->Add(
        "http://upload.wikimedia.org/wikipedia/ru/d/dd/%D0%9B%D0%B8%D1%87%D0%BD%D0%BE%D0%B5_%D1%84%D0%BE%D1%82%D0%BE_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0_ISNik.jpg");
    SL->Add("http://cdn2.img22.ria.ru/images/96237/05/962370528.jpg");
    SL->Add(
        "http://upload.wikimedia.org/wikipedia/ru/e/e8/%D0%A4%D0%BE%D1%82%D0%BE_%D0%BD%D0%B0_%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8E_0021.jpg");
    SL->Add("http://bigpicture.ru/wp-content/uploads/2011/12/110.jpg");
    SL->Add(
        "http://bestfotoposter.ru/downloads/goroda/arhitectura/8962x5974-96dpi.jpg");
 
    TPhoto ** photo = new TPhoto*[10];
    for (int i = 0; i < 10; i++) {
        photo[i] = new TPhoto(true);
        photo[i]->photo_url = SL->Strings[i];
        photo[i]->Start();
    }
}
А вот что в потоке
cpp
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
// ---------------------------------------------------------------------------
 
#include <System.hpp>
#pragma hdrstop
 
#include "TPhoto.h"
#include "Unit1.h"
#pragma package(smart_init)
// ---------------------------------------------------------------------------
 
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(&UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall TPhoto::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
// ---------------------------------------------------------------------------
 
__fastcall TPhoto::TPhoto(bool CreateSuspended) : TThread(CreateSuspended) {
    FreeOnTerminate = true;
}
 
// ---------------------------------------------------------------------------
void __fastcall TPhoto::Execute() {
    TIdHTTP * http = new TIdHTTP;
 
    http->OnWorkBegin = pic_load_start;
    http->OnWork = pic_load;
    http->OnWorkEnd = pic_load_end;
 
    photo_ms = new TMemoryStream;
    http->Get(photo_url, photo_ms);
 
}
// ---------------------------------------------------------------------------
 
void __fastcall TPhoto::pic_load_start(TObject *ASender, TWorkMode AWorkMode,
    __int64 AWorkCountMax) {
    Synchronize(&listitem);
}
 
void __fastcall TPhoto::pic_load(TObject *ASender, TWorkMode AWorkMode,
    __int64 AWorkCount) {
    //
}
 
void __fastcall TPhoto::pic_load_end(TObject *ASender, TWorkMode AWorkMode) {
    Synchronize(&pic);
}
 
void __fastcall TPhoto::listitem() {
    item = new TListBoxItem(Form1->ListBox1);
    ani = new TAniIndicator(item);
    ani->Parent = item;
    ani->Align = TAlignLayout::Client;
    ani->Enabled = true;
    item->Parent = Form1->ListBox1;
    item->Width = 150;
    item->Height = 150;
}
 
void __fastcall TPhoto::pic() {
    ani->Enabled = false;
    ani->Free();
    image = new TImage(item);
    image->Parent = item;
    image->Width = item->Width;
    image->Height = item->Height;
    image->WrapMode = TImageWrapMode::Fit;
    image->Bitmap->LoadFromStream(photo_ms);
 
    image->OnClick = pic_click;
}
 
void __fastcall TPhoto::pic_click(TObject *Sender) {
//
 
}
H
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
// ---------------------------------------------------------------------------
 
#ifndef TPhotoH
#define TPhotoH
// ---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <FMX.Controls.hpp>
#include <FMX.Forms.hpp>
#include <FMX.Layouts.hpp>
#include <FMX.ListBox.hpp>
#include <FMX.StdCtrls.hpp>
#include <FMX.Types.hpp>
#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdHTTP.hpp>
#include <IdTCPClient.hpp>
#include <IdTCPConnection.hpp>
 
// ---------------------------------------------------------------------------
class TPhoto : public TThread {
private:
    TImage * image;
    TListBoxItem * item;
    TMemoryStream * photo_ms;
    TAniIndicator * ani;
 
protected:
    void __fastcall Execute();
    void __fastcall pic();
    void __fastcall pic_load_start(TObject *ASender, TWorkMode AWorkMode,
        __int64 AWorkCountMax);
    void __fastcall pic_load(TObject *ASender, TWorkMode AWorkMode,
        __int64 AWorkCount);
    void __fastcall pic_load_end(TObject *ASender, TWorkMode AWorkMode);
    void __fastcall listitem();
    void __fastcall pic_click(TObject *Sender);
 
public:
    UnicodeString photo_url;
 
    __fastcall TPhoto(bool CreateSuspended);
};
// ---------------------------------------------------------------------------
#endif
1
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
22.07.2014, 23:36  [ТС]
как я понял вы задаете 10 потов согласно вашим 10 ссылкам
C++
1
TPhoto ** photo = new TPhoto*[10];
потом запускаете все потоки по очереди передавая ссылки в поток
C++
1
 for (int i = 0; i < 10; i++)
а что если я хочу запустить чтоб 1000 ссылок обработалось в 20 потоков, то бишь как только поток отработает - запускался новый. Как определить отработал ли поток?
0
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
22.07.2014, 23:41
Цитата Сообщение от QWIPQ Посмотреть сообщение
а что если я хочу запустить чтоб 1000 ссылок обработалось в 20 потоков, то бишь как только поток отработает - запускался новый. Как определить отработал ли поток?
Определить состояние потока TThread
1
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
22.07.2014, 23:45  [ТС]
Цитата Сообщение от DeadHipo Посмотреть сообщение
Состояние потока TThread
Ща сижу в этой теме но тут походу больше рассуждений чем сути вещей
0
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
22.07.2014, 23:54
Цитата Сообщение от QWIPQ Посмотреть сообщение
Ща сижу в этой теме но тут походу больше рассуждений чем сути вещей
может подумать в сторону возвращения последней функции true по окончании?
0
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
22.07.2014, 23:55  [ТС]
оказалось все просто
C++
1
if(Thr2->Finished)ShowMessage("урааа");
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.07.2014, 00:35
Цитата Сообщение от QWIPQ Посмотреть сообщение
оказалось все просто
C++
1
2
3
4
Thr2->FreeOnTerminate = true;
// ...
if(Thr2->Finished)ShowMessage("урааа"); /*  Фиг тебе! я уже давно закончил
 работу и удалился а ты ко мне обращаешься по невалидному указателю!*/
Читай ссылку которую тебе дали внимательнее.

Цитата Сообщение от DeadHipo Посмотреть сообщение
Состояние потока TThread
Я где то в другой теме ответил на этот вопрос, один из вариантов использовать OnTerminated, но стоит опасаться дедлоков.
0
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
23.07.2014, 01:14  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
/* Фиг тебе! я уже давно закончил работу и удалился а ты ко мне обращаешься по невалидному указателю!*/
сейчас пробую так работает 0_о вызываю 100 потоков сразу а потом по освобождению заполняю...
0
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
23.07.2014, 01:35
Цитата Сообщение от QWIPQ Посмотреть сообщение
сейчас пробую так работает 0_о вызываю 100 потоков сразу а потом по освобождению заполняю...
Цитата Сообщение от QWIPQ Посмотреть сообщение
оказалось все просто
Могу предположить, что ты не удалял созданный поток после его выполнения с помощью delete Thread..
Поэтому и не ругается.
0
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
23.07.2014, 17:15  [ТС]
где-то что-то я намудрил...
Вызов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
                    if(i<100) вызываю первые 100 ссылок
                    {
                        Thr[i] = new Potok(true);
                        Thr[i]->FreeOnTerminate = true;
                        Thr[i]->Start();
                    }
                    if(i>99) вызываю по мере освобождения
                    {
                        Thr[p] = new Potok(true);
                        Thr[p]->FreeOnTerminate = true;
                        Thr[p]->Start();
                    }
в конце потока:
C++
1
2
        delete HTTP,TIdSSLIOHandlerSocketOpenSSL2;
        delete SZ,SL,Domain,Login,Pas;
заметил:
1. дублируется вывод после обработки
2. в компоненте почему-то висят старые данные (предыдущий залогенный пользователь)
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.07.2014, 17:19
Цитата Сообщение от QWIPQ Посмотреть сообщение
delete HTTP,TIdSSLIOHandlerSocketOpenSSL2; delete SZ,SL,Domain,Login,Pas;
По делиту на каждый указатель на объект, перечисление через запятую не канает.
А вообще для таких целей есть умные указатели.

C++
1
2
3
4
delete HTTP;
delete TIdSSLIOHandlerSocketOpenSSL2;
// ... итд
delete Pas;
0
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
23.07.2014, 21:03  [ТС]
Когда синхронизирую функцию в потоке - скорость запуска потоков и обработки падает в нули просто и поток не хочет повторно вызываться до момента завершения предыдущего
C++
1
2
3
4
void __fastcall Potok::Execute()
{
      Synchronize(&Spisok);
}
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
23.07.2014, 22:07
Цитата Сообщение от Avazart Посмотреть сообщение
Я где то в другой теме ответил на этот вопрос, один из вариантов использовать OnTerminated, но стоит опасаться
.
Проверка существования потока
1
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 329
24.07.2014, 15:58
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TIDThread::Execute()
{
//....код
  Synchronize(&Done);
}
void __fastcall TIDThread::Done()
{
  fMain->Done(sPage);//передаю какой то результат.
}
__fastcall TIDThread::TIDThread(bool CreateSuspended)
    : TThread(CreateSuspended)
{
  FreeOnTerminate = true;
}
В конце Exec() потока вызываю ф-цию, которая обрабатывает результат.
Поток поставил самоубивающийся.
Вроде работает.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
24.07.2014, 19:30
Цитата Сообщение от QWIPQ Посмотреть сообщение
Когда синхронизирую функцию в потоке - скорость запуска потоков и обработки падает в нули просто и поток не хочет повторно вызываться до момента завершения предыдущего
Надо было справку-то почитать по Synchronize. У тебя так "потоки" выполняются целиком в главном потоке, причем по очереди...
1
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
25.07.2014, 12:43  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
У тебя так "потоки" выполняются целиком в главном потоке, причем по очереди...
ну после того как ответа на форуме не нашел, а некоторые вообще послали, открыл почитал и сделал еще до твоего коммента
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.07.2014, 12:43
Помогаю со студенческими работами здесь

Некорректный запуск Windows 7 SP 1 x64
Всем доброго времени суток. Возникла следующая проблема: запускаю комп, все нормально, выскакивает приветствие, появляется рабочий стол,...

Некорректный запуск .exe файла из кода
Доброго времени суток. Пишу программу на java которая в одном месте должна запустить gen.exe файл. В свою очередь gen.exe создает...

Visual Stiler и некорректный запуск приложения на XP
Все привет. Недавно нашёл такое чудо как надстройка к VS которая даёт возможность прикрутить к своему приложению визуальные стили Windows...

(Visual C# + DirectX) Некорректный запуск и работа программы
Добрый день! Я замучился ломать голову, в чем у меня проблема. Использую Visual C#, с DirectX работаю посредством XNA. Пытаюсь вывести...

Как исправить некорректный запуск/отсутствие запуска программ
Добрый день! Прошу, пожалуйста, помочь с проблемой, которая возникает на виндоус 10 (после переустановки тоже): через некоторое время...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru