zoukankan      html  css  js  c++  java
  • 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 );

  • 相关阅读:
    I.MX6 Surfaceflinger 机制
    理解 Android Fragment
    RPi 2B DDNS 动态域名
    RPi 2B IPC webcam server
    理解 Android MVP 开发模式
    I.MX6 system.img unpack repack
    can't set android permissions
    VMware Ubuntu 共享文件夹
    解决oracle数据库连接不上的问题
    perfect-scrollbar示例
  • 原文地址:https://www.cnblogs.com/cb168/p/4786394.html
Copyright © 2011-2022 走看看