Гобелен - кликните для возврата на главную
Не прошло и месяца а Фурмановская ЦРБ в очередной раз попала в историю. На этот раз сотрудница клеветала на пациентов, а именно огласку получил случай когда сотрудница назвала пациента алкашём.
Ровно 3 года назад произошло событие, которое подарило жителям планеты Змеля новый чистый праздник 6 апреля - в этот замечательный день земля забрала гнить негодяя и СПАМера Жладимира Вольфовича Жириновского.
Как бы не обстояли дела в области культуры и IT-технологий, Самосвал писал статьи на связанные темы и планирует ещё написать.
Начал разбираться с информацией которая находится в HTTPS клиентском запросе рукопожатия.
Обратите внимание! Объект изображённый на гобилене может отличаться от общепринятого вида описанного объекта. Тут дело в том что художник видит именно так!
Код ниже успешно выполняется в Borland C++ Builder 6(проверено), для того чтобы запустить код в пустом проекте на форме разместить Laber1, Button1 и Button2 затем заменить код файлов Unit1.h и Unit.cpp кодом представленным для указанных файлов ниже.
Файл Unit1.h
#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
#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(); // Останавливаем поток при закрытии формы
}
Вы так же можете прочитать следующие статьи: