小弟是新手,关于多线程的问题,大虾帮忙啊,,

ie521 2006-04-27 09:01:16
小弟刚刚接触BCB多线程编程,在网上看了些例子,按如下步骤做多线程:

窗体上有一个按钮,button1 ,测试的效果是:
当单击Button1时在窗体的指定位置一直写数字,0-1000000

单线程时,我的Button1的单击事件是这样写的,
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HDC DC=GetDC(Form1->Handle);
for(int i=0;i<1000000;i++){
String s=i;
TextOut(DC,10,10,s.c_str(),s.Length());
}
ReleaseDC(Form1->Handle,DC);
}

没有问题的,但是当执行代码时,窗体界面就不能对用户操作响应了(不能移动窗体,不能最小化等)。

所以小弟也用一个独的线程来执行上面的代码,这样主线程还可以对用户的操作进行响应。

也就是要在单击Button1时,启用一个新的线程还在窗体的指定位置写数字,0-1000000

开始如下操作,

1,选择 "File" → "New" → "Other" → "Thread Object",
2, 在弹出的窗口中的 "Class Name" 中填 "MyThread",点OK,

这时程序好像是自动添加了两个文件,Unit2.cpp和Unit2.h,
在Unit2.cpp中有

void __fastcall NewThread::Execute()
{
//---- Place thread code here ----
}

我把它改成了我要执行的任务,
void __fastcall NewThread::Execute()
{
HDC DC=GetDC(Form1->Handle);
for(int i=0;i<1000000;i++){
String s=i;
TextOut(DC,10,10,s.c_str(),s.Length());
}
ReleaseDC(Form1->Handle,DC);

}

然后要做的就是当点击Button1时,来启用这个线程了,但是接下来的操作小弟就不会了,,,
烦请大虾赐教啊,,,
...全文
264 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoshi0 2006-04-27
  • 打赏
  • 举报
回复
首先你要包含你的线程类所在的头文件

其次动态创建线程的时候要用指针

MyThread *MyThread1 = new MyThread(false);
ie521 2006-04-27
  • 打赏
  • 举报
回复
大哥,能不能给小弟说得清楚一点呀?
嗯,小弟试着在 Button1的单击事件中,写下页面的代码,担提示错误,

代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
MyThread MyThread1=new MyThread(false);
}

错误提示:
[C++ Error] Unit1.cpp(20): E2451 Undefined symbol 'MyThread'
[C++ Error] Unit1.cpp(20): E2379 Statement missing ;
BlueDeepOcean 2006-04-27
  • 打赏
  • 举报
回复
动态生成一个TThread的类实例,之后这个实例的Execute()等于上面的Execute()。
ie521 2006-04-27
  • 打赏
  • 举报
回复
没人回答,老子自己解决了,哼
ie521 2006-04-27
  • 打赏
  • 举报
回复
怎么包含线程所在类的头文件啊,是不是在 unit1.cpp里加一行 #include <unit2.h>就可以了啊?

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧