【问题标题】:Marquee in seperate thread in c++ builder 10在c ++ builder 10中的单独线程中选框
【发布时间】:2011-03-14 07:10:11
【问题描述】:

我刚刚发现,当我的应用程序加载数据时,在同一个线程中制作选取框文本会稍微停止。

我在问是否有人在他们的应用程序中使用 TTimer 在单独的线程中完成了选取框功能。

【问题讨论】:

    标签: multithreading c++builder


    【解决方案1】:

    即使你在一个线程中做选取框,你仍然必须将它与主线程同步才能显示,所以如果你继续在主线程中进行冗长的数据加载,你仍然会遇到同样的问题。所以在一个单独的线程中加载数据,并将选取框(以及所有其他 UI 元素和逻辑)留在它所属的主线程中。一开始你不应该在主线程中进行阻塞操作。

    【讨论】:

      【解决方案2】:
      HANDLE hThread;
      DWORD ThreadId;
      int Data_Of_Thread_1 = 1;
      
      unsigned long __stdcall ThreadFunc(void *Arg)
      {
         int a=0;
         while(a != 100000000000000000)
         {
            a++;
            Form1->ListBox1->Items->Add(a);
         }
      
         return 0;
      }
      
      void __fastcall TForm1::Button1Click(TObject *Sender)
      {
         // hThread=CreateThread(NULL,0,ThreadFunc,0,0,&ThreadId);
         hThread = CreateThread( NULL, 0,  ThreadFunc, &Data_Of_Thread_1, 0, &ThreadId);
         if ( hThread == NULL)
         {
            ExitProcess(Data_Of_Thread_1);
         }
      }
      
      void __fastcall TForm1::Button2Click(TObject *Sender)
      {
         TerminateThread(hThread,ThreadId);
      }
      

      【讨论】:

      • 这不安全!不应在线程中调用 VCL 方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      相关资源
      最近更新 更多