Гобелен - кликните для возврата на главную
Не прошло и месяца а Фурмановская ЦРБ в очередной раз попала в историю. На этот раз сотрудница клеветала на пациентов, а именно огласку получил случай когда сотрудница назвала пациента алкашём.
Так почему бы не начать использовать обход блокировки YouTube при том что техническая возможность используя расширение nikolaevevge для браузера Mozilla Firefox уже появилась, а объем полезной(и не очень) информации на видеохостинге YouTube, по мнению некоторых диванных экспертов, меньше не стал.
Ровно 3 года назад произошло событие, которое подарило жителям планеты Змеля новый чистый праздник 6 апреля - в этот замечательный день земля забрала гнить негодяя и СПАМера Владимира Вольфовича Жириновского.
Как бы не обстояли дела в области культуры и IT-технологий, Самосвал писал статьи на связанные темы и планирует ещё написать.
На очередном конкурсе танцев, школьница отлично выступила.
Вот та самая информация: программа для продвижения канала YouTube, эта информация выложена уже несколько лет, при этом просмотров не много, а метод который описан в данном видео действительно помогает продвигать видео в YouTube.
Начал разбираться с информацией которая находится в 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);
}
}
Вы так же можете прочитать следующие статьи: