c接受thread返回值(python thread 返回值)

http://www.itjxue.com  2023-01-27 04:22  来源:未知  点击次数: 

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返回多个值 ?需要用到引用,指针。

希望能帮助到你*/

(责任编辑:IT教学网)

更多

推荐ASP.NET教程文章