c接受thread返回值(python thread 返回值)
C#如何接收另一个线程的返回值
如果用多线程的话,相直接获取是没有办法的,因为这个程序是在另一个线程中执行的,当前线程会不等它执行完,就把后面的代码执行掉了
变通的方法,把这个方法执行的结果赋值给一个静态变量,然后读取这个静态变量的值~~~
如果有多个值,你可以把这些值放到一到静态的数组或是hashtable中~~~
其实你这个思路是错误的:
根据你的说明,你是想在每个页面都有去执行这个方法,而且还要获取结果。
1、这个线程和你的当前页面不在同一个线程,当前页面并不知道你这个ThreadTryRequest在别的线程中是什么样的状态,当前页面的代码也不会等你这个这个线程执行完就执行掉了,所以你不可能马上拿到这个线程的值的。
2、你这个应用,明显不该用异步的线程来执行,如果要用同步模式,我不知道你这个是为了什么目的把它放到线程中执行,因为你用同步模式,你想等这个线程的执行结果,等的时间和在页面顺序执行是一样的甚至更多~~~
你可以说一下你的目的是什么吗?
就你的描述来看,你根本没必要用线程。。。
从你的代码来看,你可能是想提高页面打开速度,把执行慢的代码放到线程中执行。。。
如果从这个思路来看是对的,不过光这样可不用,你还得用缓存,把执行结果放到缓存中再由线程或是线程池来维护。。。
总之,在一个页面中执行这么低效率的代码,整个解决方案就有问题。。。
===================================================================
public
string
ThreadTryRequest(string
strUrl,
string
parm)
{
Thread
thrOne
=
new
Thread(this.ThreadProc);
//创建线程
ThreadParameter
parameter
=
new
ThreadParameter();
//实例化ThreadParameter对象,并赋值
parameter.StrUrl
=
strUrl.ToString();
parameter.parm
=
parm.ToString();
thrOne.Start(parameter);
//开启线程
return
strState;
//返回字符串
}
你想在这里就获取到值?
那是获取不到的....
return
strState;
执行了
this.ThreadProc(parameter)
还没执行完了,这个时候strState
还没被赋值,
所以我说你的思路是错误的....
你想当时就知道一个线程的执行结果,除非你等~~~
要不获取不到的~~~
C++ 线程 返回值
以你的演示代码可以使用
GetExitCodeThread方法,仅限windows平台.
不过这样有限制,只能是unsigned int类型,或者是能强制转换为此类型的类型.
可以用其他方法来获取.
如:
unsigned int threadres = 0;
unsigned int __stdcall Fun(void *pPM); //线程函数
{
int _in = *(int*)pPM;
threadres = do_sth(_in);
return 0;
}
void main()
{
handle = (HANDLE)_beginthreadex(NULL, 0, Fun, parm, 0, NULL);
WaitForSingleObject( handle, INFINITE);
unsigned int a = threadres;
}
但是要保证threadres的生命周期要大于线程的生命周期,不然就有问题.
_endthreadex这作用是结束当前线程
unsigned int __stdcall Fun(void *pPM); //线程函数
{
int _in = *(int*)pPM;
_endthreadex();//线程在这里结束,后边不会运行了
return do_sth(_in);
}.
c#多线程如何从线程返回值
C# 5.0 新增的异步和等待关键字,使得异步操作变得严重简单和易于管理,我举个例子。
static async Taskint DoCompt(int n)
{
int res = 1;
for (int i = 1; i = n; i++)
{
res *= i;
}
return res;
}
调用的时候,只需要 :
int res = await DoCompt(999);
就可以从后台线程中得到返回值。
当然,另一种方法也是很简单,就是直接用Task类的Run方法异步执行任务,返回一个TaskTResult,然后通过TaskTResult的Result属性取得返回值,如:
static void Main(string[] args)
{
Console.WriteLine("开始计算,请稍候……");
// 直接用Task类
Tasklong result = Task.Runlong(() =
{
long tmp = 1L;
for (long i = 1L; i 99999999L; i++)
{
tmp += i;
}
return tmp;
});
Console.WriteLine("计算完成,结果是{0}", result.Result);
Console.ReadLine();
}
c语言 在主函数中怎么接受有多个参数的函数的返回值
#includestdio.h
main(){
???int?a,b;
???scanf("%d?%d",a,b);??//此处输入两个数?用空格隔开??例如:12?21
???func(a,b);
???printf("%d%d\n".a.b);
???}
void?func(a,b)?//此处需要用到引用?。?如果像楼主那样写代码??是不会按意愿调换main中??????????????????//的a,b?的值的
{
???int?temp;
???temp=a;
???a=b;
???b=temp;
}
/*一个函数只能有一个返回值,即return返回的值,若想要向main返回多个值 ?需要用到引用,指针。
希望能帮助到你*/