线程问题?

TripH0101 2010-03-09 03:27:58
我对使用线程不了解,有几个问题想请教下:
1、在主程序中定义了一个函数 bool TestRun(int a,AnsiString str);如何在线程中调用这个函数,主程序得到返回值?
2、如果这个函数被几段代码同时调用,处理方法一样吗?
...全文
87 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
TripH0101 2010-03-11
  • 打赏
  • 举报
回复
thanks ,ydlchina
ydlchina 2010-03-10
  • 打赏
  • 举报
回复

//?????????????????????
//What?
//.H
public: // User declarations
__fastcall TForm1(TComponent* Owner);
bool TestRun(int a,AnsiString str);
bool bTest;
//.CPP
//---------------------------------------------------------------------------
bool TForm1::TestRun(int a,AnsiString str)
{
if (a==1) {
return true;
}
return false;
}

void __fastcall TForm1::Button2Click(TObject *Sender)
{
// bTest = TestRun(1,"ydlchina"); //遮蔽掉
CTestThread * test = new CTestThread(false);
}
//thread
void __fastcall CTestThread::Execute()
{
//---- Place thread code here ----
Form1->bTest= Form1->TestRun(1,"ydlchina"); //跑这儿来了
if(Form1->bTest)
{
Form1->Edit1->Text = "ydlchina提示你OK了";
}
}

TripH0101 2010-03-10
  • 打赏
  • 举报
回复
自己顶。。。。。。。。。。。。。。
n27741 2010-03-09
  • 打赏
  • 举报
回复
.....

你用API来写,更直观

详细的实现,参考MSND的 CreateThread函数
hind24 2010-03-09
  • 打赏
  • 举报
回复
形式应该是

bTest = TForm1->TestRun(1,"ydlchina");

但是如果这个函数里面有VCL对象,是否也应该用Synchronize?如果是,该函数的参数怎么办?

线程自己的函数如果是带参数的又需要操作VCL对象,怎么处理?

借帖一用,别介意
TripH0101 2010-03-09
  • 打赏
  • 举报
回复
谢谢,我的意思是将函数放在线程中去执行。类似这样
//线程
void __fastcall CTestThread::Execute()
{
//---- Place thread code here ----
/*bool bTest = TestRun(1,"ydlchina");
retrun bTest;*/

}
ydlchina 2010-03-09
  • 打赏
  • 举报
回复

//不明白你的意思,不过还是给你做个示范,不过这只是一种,他和使用其它单元没什么两样,不过你要注意没有Handle
//主程序
public: // User declarations
__fastcall TForm1(TComponent* Owner);
bool TestRun(int a,AnsiString str);
bool bTest;//不一定非要这么用
bool TForm1::TestRun(int a,AnsiString str)
{
if (a==1) {
return true;
}
return false;
}

void __fastcall TForm1::Button2Click(TObject *Sender)
{
bTest = TestRun(1,"ydlchina");
CTestThread * test = new CTestThread(false);
}

//线程
void __fastcall CTestThread::Execute()
{
//---- Place thread code here ----
if(Form1->bTest)//注意别忘#include这个所在的头文件
{
Form1->Edit1->Text = "ydlchina提示你OK了";
}
}
//只是一个实例
TripH0101 2010-03-09
  • 打赏
  • 举报
回复
说具体点。比如我在主程序中:Unit1中定义了一个函数bool TestRun(int a,AnsiString str);
然后void __fastcall TForm1::TestButton1Click(TObject *Sender)
{
CTestThread * test = new CTestThread(false);
}

那么线程文件中(Unit2)代码如何写?怎样得到函数TestRun的返回值?
void __fastcall CTestThread::Execute()
{
//---- Place thread code here ----

}
ydlchina 2010-03-09
  • 打赏
  • 举报
回复
如果你使用TThread建立线程,和其它单元文件每什么两样,线程就好像你放了个Timer.

13,825

社区成员

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

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