c++builder XE8 线程 Thread 匿名线程 CreateAnonymousThread

 thread Thread  c++builder XE8 / RAD 10 Settle

       TThread.Synchronize(nil, procedure
      begin
        Memo1.Lines.Add('Server has NOT resume download feature');
      end);

delphi

TThread.CreateAnonymousThread(MyMethod).Start;

 TThread.Synchronize(TThread.CurrentThread, GetImage);//Synchronize阻塞执行同步

匿名线程中调用单击事件
    TThread.CreateAnonymousThread(
      procedure()
      begin
        Button1.Click();
      end).Start;

 

get CreateAnonymousThread handler

 Thread := TThread.CreateAnonymousThread(My_Own_Procedure);

Thread.OnTerminate := MyThreadTerminated;

Thread.Start;

https://forums.embarcadero.com/thread.jspa?threadID=171738

TThread.Synchronize (TThread.CurrentThread,
  procedure ()
  begin
  end);
  end);

匿名线程,函数线程

void __fastcall TForm3::GetImage()
{
;
}

void __fastcall TForm3::Button1Click(TObject *Sender)
{
TThread::Synchronize(TThread::CurrentThread, GetImage);

}

上面的写法并不是创建新线程。也不是匿名线程的用法,达不到线程的效果。这个是通知主线程执行代码,也就是这个代码必须在子线程里(匿名线程也可以)里的用于更新VCL界面的,所以才用到,普通的VCL没有任何线程的代码写这个毫无意义。

是不是以前的TThread.CreateAnonymousThread

最早是这样http://blog.csdn.net/luozhuang/article/details/29827763

c++匿名线程,XE8也没有官方的实例,RAD 10 Settle才有了。

    TThread::CreateAnonymousThread([this]
    {
        if (!BluetoothLE1->DiscoveredDevices->Items[ListBox1->ItemIndex]->DiscoverServices())
        {
            TThread::Synchronize(NULL, [this]
            {
                ListBox2->Items->Add("- Discover services not allow");
                ListBox1->Enabled = true;
            });
        }
    })->Start();
    TThread::CreateAnonymousThread(AnonymousLambda(&this->SampleDownload))->Start();

简化版匿名线程

    TThread::CreateAnonymousThread([this]
    {
        TThread::Synchronize(NULL, [this]
        {
            Caption = Now();
Sleep(5000);
Caption = "end"; }); })
->Start();

匿名线程调用函数,这个就比较好用了。只能在新版编译器bcc32c使用,bcc32不支持语法。

void __fastcall TForm3::GetImage()
{
    this->Caption = Now();
    Sleep(5000);
//Query->ExecSQL();执行sql或存储过程
//Query->Open();
Caption = "end";
} 

void __fastcall TForm3::Button1Click(TObject *Sender)
{
TThread::CreateAnonymousThread([
this] {GetImage();})->Start();
}
    TThread::CreateAnonymousThread([this](){
        TThread::Synchronize(TThread::CurrentThread, [this]()
        {
            Button1->Click();
        });
    })->Start();

看原始定义参数是_di_TProc,还有下面这种写法

TTask::Run( _di_TProc(new TCppTask(5000, MoveUpAnim, Button1)) );

http://community.embarcadero.com/index.php/blogs/entry/spinning-icons-to-visually-queue-load-states-using-true-type-font-pack-font-awesome

http://blog.appmethod.com/spinning-icons-to-visually-queue-load-states-using-true-type-font-pack-font-awesome

CurThread: TThreadID;

CurThread := GetCurrentThreadID;

界面 无延迟无卡顿,用clang编译器

void __fastcall TForm1::Button1Click(TObject *Sender)
{

    TTask::Run([]()
        {
            Sleep(2000);
            ShowMessage("aaa");
        }

    );
}

 DWORD WINAPI  PollThread(LPVOID pParam)/线程函数

 hThread = CreateThread ( NULL, 0, PollThread, this, 0, NULL );

原文地址:https://www.cnblogs.com/cb168/p/4786394.html