Гобелен - кликните для возврата на главную
Не прошло и месяца а Фурмановская ЦРБ в очередной раз попала в историю. На этот раз сотрудница клеветала на пациентов, а именно огласку получил случай когда сотрудница назвала пациента алкашём.
Ровно 3 года назад произошло событие, которое подарило жителям планеты Змеля новый чистый праздник 6 апреля - в этот замечательный день земля забрала гнить негодяя и СПАМера Жладимира Вольфовича Жириновского.
Как бы не обстояли дела в области культуры и IT-технологий, Самосвал писал статьи на связанные темы и планирует ещё написать.
Начал разбираться с информацией которая находится в HTTPS клиентском запросе рукопожатия.
Обратите внимание! Объект изображённый на гобилене может отличаться от общепринятого вида описанного объекта. Тут дело в том что художник видит именно так!
Ранее я писал статью на тему использование TThread и Synchronize в Delphi, решил привести аналогичный пример на языке C++.
Ещё один рабочий пример(проверено) работы с потоками в Borland C++ Builder 6.
Файл Unit1.h
Ссылка на видео на видеохостинге YouTube: https://www.youtube.com/watch?v=hauM6wuHmgU
#ifndef Unit1H
#define Unit1H
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
class TProgressThread : public TThread
{
protected:
void __fastcall Execute();
void __fastcall UpdateProgress();
void __fastcall ResetProgress(); // Добавляем новый метод
public:
__fastcall TProgressThread(bool CreateSuspended);
};
class TForm1 : public TForm
{
__published:
TProgressBar *ProgressBar1;
TButton *Button1;
TButton *Button2;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private:
TProgressThread *Thread;
public:
__fastcall TForm1(TComponent* Owner);
};
extern PACKAGE TForm1 *Form1;
#endif
Файл Unit1.cpp
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
// Реализация методов потока
__fastcall TProgressThread::TProgressThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
FreeOnTerminate = true;
}
void __fastcall TProgressThread::ResetProgress()
{
Form1->ProgressBar1->Position = 0;
}
void __fastcall TProgressThread::UpdateProgress()
{
Form1->ProgressBar1->Position = Form1->ProgressBar1->Position + 1;
}
void __fastcall TProgressThread::Execute()
{
// Сбрасываем прогресс в ноль через Synchronize
Synchronize(ResetProgress);
// Основной цикл потока
while(!Terminated &&
Form1->ProgressBar1->Position < Form1->ProgressBar1->Max)
{
Sleep(100);
if(Terminated) break;
Synchronize(UpdateProgress);
}
}
// Остальная часть файла Unit1.cpp без изменений
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
Thread = NULL;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Thread == NULL)
{
Thread = new TProgressThread(true);
Thread->Resume();
Button1->Caption = "Stop";
}
else
{
Thread->Terminate();
Thread = NULL;
Button1->Caption = "Start";
}
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ShowMessage("Main thread is working!");
}
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if(Thread != NULL)
{
Thread->Terminate();
}
}
Файл Unit1.h
// Unit1.h
#ifndef Unit1H
#define Unit1H
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
class TForm1 : public TForm
{
__published:
TProgressBar *ProgressBar1;
TButton *Button1;
TButton *Button2;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private:
class TProgressThread *Thread; // Предварительное объявление
public:
__fastcall TForm1(TComponent* Owner);
};
extern PACKAGE TForm1 *Form1;
#endif
Файл Unit1.cpp
// Unit1.cpp
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "ProgressThread.h" // Подключаем наш модуль потока
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
Thread = NULL;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Thread == NULL)
{
Thread = new TProgressThread(true);
Thread->Resume();
Button1->Caption = "Stop";
}
else
{
Thread->Terminate();
Thread = NULL;
Button1->Caption = "Start";
}
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ShowMessage("Main thread is working!");
}
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if(Thread != NULL)
{
Thread->Terminate();
}
}
Файл ProgressThread.h
#ifndef ProgressThreadH
#define ProgressThreadH
#include <Classes.hpp>
class TProgressThread : public TThread
{
protected:
void __fastcall Execute();
void __fastcall UpdateProgress();
void __fastcall ResetProgress();
public:
__fastcall TProgressThread(bool CreateSuspended);
};
#endif
Файл ProgressThread.cpp
// ProgressThread.cpp
#include <vcl.h>
#pragma hdrstop
#include "ProgressThread.h"
#include "Unit1.h" // Для доступа к Form1
#pragma package(smart_init)
__fastcall TProgressThread::TProgressThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
FreeOnTerminate = true;
}
void __fastcall TProgressThread::ResetProgress()
{
Form1->ProgressBar1->Position = 0;
}
void __fastcall TProgressThread::UpdateProgress()
{
Form1->ProgressBar1->Position = Form1->ProgressBar1->Position + 1;
}
void __fastcall TProgressThread::Execute()
{
Synchronize(ResetProgress);
while(!Terminated &&
Form1->ProgressBar1->Position < Form1->ProgressBar1->Max)
{
Sleep(100);
if(Terminated) break;
Synchronize(UpdateProgress);
}
}
Файл Unit1.h
#ifndef Unit1H
#define Unit1H
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include "Unit2.h"
class TForm1 : public TForm
{
__published:
TProgressBar *ProgressBar1;
TButton *Button1;
TButton *Button2;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private:
TProgresso *tpg;
public:
__fastcall TForm1(TComponent* Owner);
};
extern PACKAGE TForm1 *Form1;
#endif
Файл Unit1.cpp
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
tpg = NULL;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (tpg == NULL)
{
tpg = new TProgresso(true);
tpg->FreeOnTerminate = true;
tpg->Resume();
}
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (tpg != NULL)
{
tpg->Terminate();
}
}
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if (tpg != NULL)
{
tpg->Terminate();
}
}
Файл Unit2.h
#ifndef Unit2H
#define Unit2H
#include <Classes.hpp>
class TProgresso : public TThread
{
protected:
void __fastcall UpdateProgressBar();
void __fastcall Execute();
public:
__fastcall TProgresso(bool CreateSuspended);
};
#endif
Файл Unit2.cpp
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit1.h"
#pragma package(smart_init)
__fastcall TProgresso::TProgresso(bool CreateSuspended) : TThread(CreateSuspended)
{
}
void __fastcall TProgresso::UpdateProgressBar()
{
Form1->ProgressBar1->Position = Form1->ProgressBar1->Position + 1;
}
void __fastcall TProgresso::Execute()
{
Form1->ProgressBar1->Position = 0;
while (!Terminated && Form1->ProgressBar1->Position < Form1->ProgressBar1->Max)
{
Sleep(100);
if (Terminated) break;
Synchronize(UpdateProgressBar);
}
}
Вы так же можете прочитать следующие статьи: