多线程如何传递参数并返回覆盖原来的值

请教各位高手:我已经能把textBox1->Text作为参数传给线程函数,只是不知道怎样才能让函数返回值,并覆盖原来textBox1->Text的值?达到的效果就是,随时... 请教各位高手:
我已经能把textBox1->Text作为参数传给线程函数,
只是不知道怎样才能让函数返回值,并覆盖原来textBox1->Text的值?

达到的效果就是,随时在void trythread( Object^ data )中修改textBox1->Text的值,
而不是线程结束后再返回.

public ref class Ctry {
public:
void trythread( Object^ data )
{
String ^s = (String ^)data;
while (1) {
//修改s的值
......
}
}
};

public ref class Form1 : public System::Windows::Forms::Form {
........

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Ctry^ tr = gcnew Ctry;
Thread^ newthread = gcnew Thread( gcnew ParameterizedThreadStart( tr, &Ctry::trythread ));
Object^ text = (Object ^)textBox1->Text; //把textBox1->Text作为参数传给线程函数
newthread->Start(text);
......
如何随时得到修改后的参数.
}
......
};

如果返回值问题不能解决,那么能不能换个程序设计的思路来实现,而避免返回值问题?

我想达到的效果是在trythread中更改字符串,并且让它显示在文本框中.
展开
 我来答
Idealsoft
2008-07-28 · TA获得超过639个赞
知道小有建树答主
回答量:461
采纳率:0%
帮助的人:291万
展开全部
这很简单的,之所以你无法修改textBox1->Text的值,是因为你传入线程的是这个指针的值,而不是这个指针的地址。你可以这样传:
newthread->Start(textBox1);

然后在线程中使用textBox1这个指针,你就可以随意的更改textBox1->Text的值了。

还有一种方法是使用所谓指向指针的指针,不知道你能否理解,也可以达到同样的目的。
tnt230
2008-07-30 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:136
采纳率:0%
帮助的人:113万
展开全部
顶楼上的,不过多线程传指针要注意多线程同时修改同一变量,会导致不是你预期的效果,最简单的办法就是给共享区上锁,不过这又要看你系统的大小了。
锁的开销还是有点大
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式