c++builder XE6 线程 tthread

摘要:
查询在该函数中执行Open()时无法实现线程效果。

thread TThread

class TSleepFunc : public TCppInterfacedObject<TProc>
{
public:
    TSleepFunc(TForm28*Form) : FForm(Form)
    {
    }
    virtual void __fastcall Invoke(void)
    {
        for (FForm->ClientDataSet1->First(); !FForm->ClientDataSet1->Eof; FForm->ClientDataSet1->Next())
        {
            FForm->ClientDataSet1->Edit();
            FForm->ClientDataSet1->FieldByName("Stat")->Value = FForm->ClientDataSet1->RecNo;
            FForm->ClientDataSet1->Post();
        }
        TThread::Synchronize(TThread::CurrentThread, UpdateCaption);
    }
    void __fastcall UpdateCaption(void)
    {
        FForm->Caption = "OK";
    }
private:
    TForm28*FForm;
};
//---------------------------------------------------------------------------
void __fastcall TForm28::Button1Click(TObject *Sender)
{
    ClientDataSet1->Close();
    ADOQuery1->Close();
    ADOQuery1->SQL->Text = "select * from tt";
    ADOQuery1->Open();
    ClientDataSet1->Open();
    TThread::CreateAnonymousThread(new TSleepFunc(this))->Start();
}

http://codeverge.com/embarcadero.cppbuilder.cpp/trttimethod-do-not-work/1055179

delphi

procedure TForm1.ConnectionTest;
var
  sc :TSQLConnection;
begin
  sc :=TSQLConnection.Create(nil);
  sc.DriverName := 'DevartOracle';
  sc.Params.Values['DATABASE'] :=eDatabase.Text;
  sc.Params.Values['User_Name'] :=eUserName.Text;
  sc.Params.Values['Password'] :=ePassword.Text;
  sc.Connected :=True;
  Sleep(1000);
  sc.Connected :=False;
  sc.Free;
end;
procedure TForm1.btnMainThreadClick(Sender: TObject);
begin
  ConnectionTest;     //Does not leak handles with Oracle 12.1.0 client.
end;
procedure TForm1.btnThreadedClick(Sender: TObject);
begin
  TThread.CreateAnonymousThread(ConnectionTest).Start;  //Leaks 9 mutex handles with Oracle 12.1.0 client.
end;
Queue依然会阻塞。
TThread.Queue(TThread.CurrentThread, procedure
begin
   FOnProcessPlay(newPos);
end);

tthread.Synchronize(TThread.CurrentThread,updateUI);
tthread.CreateAnonymousThread(updateUI).Start;
TThread.Queue(TThread.CurrentThread, startData2Background);

Synchronize代码是阻塞执行的。query.Open()放在这个函数执行是达不到线程效果的。

免责声明:文章转载自《c++builder XE6 线程 tthread》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Win7 64bit 安装VisualSVN出现报错:Servic 'VisualSVN Server' failed to start.解决办法idea绘制activity流程图中文乱码解决下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

《C#并发编程经典实例》笔记

1.前言 2.开宗明义 3.开发原则和要点 (1)并发编程概述 (2)异步编程基础 (3)并行开发的基础 (4)测试技巧 (5)集合 (6)函数式OOP (7)同步 1.前言 最近趁着项目的一段平稳期研读了不少书籍,其中《C#并发编程经典实例》给我的印象还是比较深刻的。当然,这可能是由于近段日子看的书大多嘴炮大于实际,如《Head First设计...

Python 多线程库总结

多线程库总结基于线程的并行性threading模块下面是一些基础函数,函数包括: 函数 threading.active_count() threading.current_thread() threading.get_ident() threading.enumerate() threading.main_thread() threading.se...

我看到的最棒的Twisted入门教程!

http://www.douban.com/note/232204441/ http://www.cnblogs.com/sevenyuan/archive/2010/11/18/1880681.html http://blog.csdn.net/hanhuili/article/details/9389433 我看到的最棒的Twisted入门教程! ht...

java内存模型和线程

概述 多任务的处理在现在的计算机中可以说是“标配”了,在许多的情况下,让计算机同时做几件事情,不仅是因为计算机的运算能力的强大,还有一个重要的原因是:cpu的运算速度和计算机的存储以及通讯子系统的相差的比较大,大部分的时间都花在了磁盘I/O,网络通信和数据库访问上面了,为了充分的利用资源,具体的说就是为了充分的利用cpu的“计算资源”。 高并发的一个典型的...

堆栈信息分析

一、堆栈信息解读 2013-01-13 11:02:31 Full thread dump Java HotSpot(TM) Client VM (23.1-b03 mixed mode, sharing): "[ThreadPool Manager] - Idle Thread" daemon prio=6 tid=0x069a3400 nid=0x84...

关于Web服务器的认识

       马上就要毕业了,也要开始找工作了,大学写了这么多代码了,却没有好好总结一下常用的概念很是遗憾额,就通过这篇博客记录一下我最常用的一些知识好了。        说到Web服务器,有很多文章都介绍的很好,之前看到一篇非常不错的,对我帮助很大,可惜现在找不到原文了,看到博客园有人转载,我就在这里也记一下好了,在此非常感谢作者的分析,受益匪浅。   ...