Пробую разобраться в работе потоков в Botrland C++ Builder 6

Гобелен - кликните для возврата на главную

Не прошло и месяца а Фурмановская ЦРБ в очередной раз попала в историю. На этот раз сотрудница клеветала на пациентов, а именно огласку получил случай когда сотрудница назвала пациента алкашём.

Ровно 3 года назад произошло событие, которое подарило жителям планеты Змеля новый чистый праздник 6 апреля - в этот замечательный день земля забрала гнить негодяя и СПАМера Жладимира Вольфовича Жириновского.

Как бы не обстояли дела в области культуры и IT-технологий, Самосвал писал статьи на связанные темы и планирует ещё написать.

Начал разбираться с информацией которая находится в HTTPS клиентском запросе рукопожатия.

Обратите внимание! Объект изображённый на гобилене может отличаться от общепринятого вида описанного объекта. Тут дело в том что художник видит именно так!

104 549 руб.

Описание товара

Код ниже успешно выполняется в Borland C++ Builder 6(проверено), для того чтобы запустить код в пустом проекте на форме разместить Laber1, Button1 и Button2 затем заменить код файлов Unit1.h и Unit.cpp кодом представленным для указанных файлов ниже.

Файл Unit1.h

C++
    
#ifndef Unit1H
#define Unit1H
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
      
// Объявляем класс потока прямо в Unit1.h
class TMyThread : public TThread
{
private:
    int counter;
protected:
    void __fastcall Execute();
    void __fastcall UpdateLabel();
public:
    __fastcall TMyThread(bool CreateSuspended);
};
      
class TForm1 : public TForm
{
__published:
    TLabel *Label1;
    TButton *Button1;
    TButton *Button2;
    void __fastcall Button1Click(TObject *Sender);
    void __fastcall Button2Click(TObject *Sender);
    void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private:
    TMyThread *myThread;
public:
    __fastcall TForm1(TComponent* Owner);
};
      
extern PACKAGE TForm1 *Form1;
#endif

  

Файл Unit1.cpp

C++
    
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
      
// Реализация методов потока
__fastcall TMyThread::TMyThread(bool CreateSuspended) : TThread(CreateSuspended)
{
    counter = 0;
    FreeOnTerminate = true; // Автоматическое освобождение памяти при завершении
}
      
void __fastcall TMyThread::UpdateLabel()
{
    Form1->Label1->Caption = "Counter: " + IntToStr(counter);
}
      
void __fastcall TMyThread::Execute()
{
    while(!Terminated) // Пока поток не остановлен
    {
        counter++;
        Synchronize(UpdateLabel); // Безопасное обновление Label
        Sleep(100); // Пауза 100 мс
    }
}
      
// Реализация методов формы
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
    myThread = NULL;
}
      
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if(myThread == NULL)
    {
        myThread = new TMyThread(true); // Создаем поток в приостановленном состоянии
        myThread->Resume(); // Запускаем поток
        Button1->Caption = "Stop";
    }
    else
    {
        myThread->Terminate(); // Останавливаем поток
        myThread = NULL;
        Button1->Caption = "Start";
    }
}
      
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    Label1->Caption = "Button clicked!";
}
      
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
    if(myThread != NULL)
        myThread->Terminate(); // Останавливаем поток при закрытии формы
}

  

Другие товары

Вы так же можете прочитать следующие статьи: