如何取得线程的返回值

如上面所说

你可能对线程的理解有问题。
线程是用来处理并发的事情的,你的思想仍然停留在函数调用的模式上(把线程看成了函数)
线程的返回值问题,最理想的办法就是线程来通知调度线程,这个调度线程可以是主线程,也可以是一个专门的调度线程,每当任务线程完成了自己的工作,就通知调度线程来取结果,这样才能够发挥出多线程的优势,而不是在那里傻等。
如果你把主线程当做调度线程,而你的主线程存在消息循环,那么,利用消息就是一个不错的通知方式。
任务线程完成了工作之后,向主线程发消息,消息中可以把任务线程本身(线程类)发给主线程,然后在主线程中取出这个线程类,然后得到任务线程的处理结果。
而最为主线程,只需要添加一个消息响应函数就可以了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-06-15
程就是用来处理并发的事情的,而你所说的线程的返回值
c#多线程如何从线程返回值
int res = await DoCompt(999);就可以从后台线程中得到返回值。当然,另一种方法也是很简单,就是直接用Task类的Run方法异步执行任务,返回一个Task<TResult>,然后通过Task<TResult>的Result属性取得返回值,如:static void Main(string[] args){ Console.WriteL

c#多线程怎么执行有返回值的方法
异步方法中调用异步方法并取得值:type result = await Name(params);同步方法中调用异步方法并取得值:Task<type> taskOfName = Name(params);taskOfName.Start();useTaskResult(taskOfName.Result);对于返回值不再参与计算(如仅仅用于输出)时的建议:Task.Run(() => { routine1; routine2; ....

如何在java中获取线程异步执行之后的结果
1.Future<V>接口 Runnable接口执行任务是不返回任何值的,Runnable的run()方法的执行结果是void,而Future接口的call方法是有返回结果的,这是Runnable跟Future的区别之一,它们的另一个不同之处就是实现了Runnable接口的任务执行是调用ExecutorService的execute(Runnable task)方法,而实现了Future接口的任务是...

创建线程的方式
也可以说是三种方式,线程池是一种封装好的技术。实现callable接口会有一个泛型,这泛型即代表返回值的类型。重写call()方法,得到返回值。然后注意这里使用的时候是先将实例传入FutureTask,然后再将FutureTask传入thread类。然后再start。然后调用FutureTask的get方法就可以取得返回值,这里要注意,只有线程结束...

android AsyncTask 怎么返回值给UI线程
(这个问句就是错的,onPostExecute()就是在主线程中执行的,不需要返回值给主线程,只需要在此方法中将结果存储在某个变量中,就可以在主线程中获取此值。例如,在AsyncTask中增加一个getResult方法)3.另外一个问题, 可以传参数给AsyncTask,然后在onPostExecute 使用其他activity的 finish() 吗?(Yes...

android AsyncTask 怎么返回值给UI线程
)2.UI线程 通过AsyncTask和服务器交互,需要根据结果 打开不同的新的activity,可以onPostExecute() 中返回值给主线程吗?(这个问句就是错的,onPostExecute()就是在主线程中执行的,不需要返回值给主线程,只需要在此方法中将结果存储在某个变量中,就可以在主线程中获取此值。例如,在AsyncTask中增加...

易语言子程序的参数和返回值是什么意思?
1、新建易语言程序,在启动窗口上添加一个按钮,然后双击这个按钮进入代码区域:2、进入代码区域后,右击代码区域空白部分,在展开的菜单中点击“新子程序”按钮创建一个新的子程序:3、创建子程序后,使用启动线程命令,第一个参数为“&”+子程序名,然后将第三个参数返回给一个变量:4、如果需要结束...

vb.net多线程如何返回参数,举个例子,谢谢
e As EventArgs) Handles Button1.Click '多线程返回值测试,当线程运行完成激发事件 oSquare = New SquareClass() Dim t As New Threading.Thread(AddressOf oSquare.CalcSquare) oSquare.Value = 30 t.Start() End Sub Sub SquareEventHandler(ByVal Square As Double) Handles...

delphi编程:多线程参数传递,收不到返回值,为什么?
Createthread(nil, 0, @MyThreadFun, @p, 0, Id); \/\/ 创建线程,注意这里不是阻塞的,启动线程后就直接执行下一句代码了 memo1.Text:=som; \/\/ 执行时上面那个线程可能还没执行结束 你可以理解为,线程中的代码和 memo1这句是同时执行的,所以som的结果并不可预知 thread := Createthread(nil,...

java中runnablefuture接口的作用是什么?
当提交Callable对象时,实际上是将其封装到FutureTask对象中,然后作为Runnable对象执行。管理返回值:FutureTask中的内部类Sync继承自AbstractQueuedSynchronizer,用于管理返回值的访问。在线程执行结束前,不能获取返回值。线程正常执行结束后,会修改标志位,通知等待结果的线程可以获取返回值。综上所述,Runnable...

相似回答