【发布时间】:2011-03-14 07:10:11
【问题描述】:
我刚刚发现,当我的应用程序加载数据时,在同一个线程中制作选取框文本会稍微停止。
我在问是否有人在他们的应用程序中使用 TTimer 在单独的线程中完成了选取框功能。
【问题讨论】:
我刚刚发现,当我的应用程序加载数据时,在同一个线程中制作选取框文本会稍微停止。
我在问是否有人在他们的应用程序中使用 TTimer 在单独的线程中完成了选取框功能。
【问题讨论】:
即使你在一个线程中做选取框,你仍然必须将它与主线程同步才能显示,所以如果你继续在主线程中进行冗长的数据加载,你仍然会遇到同样的问题。所以在一个单独的线程中加载数据,并将选取框(以及所有其他 UI 元素和逻辑)留在它所属的主线程中。一开始你不应该在主线程中进行阻塞操作。
【讨论】:
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);
}
【讨论】: