多线程如何得到返回值
- Delphi(Pascal) code
type dd = class(TThread) private { Private declarations } protected procedure Execute; override; end;implementationprocedure dd.Execute;var s:string; i:Integer;begin for I:=0 to 40000 do begin s:=s+'ss'; end;end;end.现在如何在主线程中得到s的值?
[解决办法]
输出到VCL组件里的话.使用synchronize进行同步
[解决办法]
LZ可能对线程的理解有问题
线程就是用来处理并发的事情的,而你所说的线程的返回值,实际上,你的思想仍然停留在函数调用的模式上(把线程看成了函数)
线程的返回值问题,最理想的办法就是线程来通知调度线程,这个调度线程可以是主线程,也可以是一个专门的调度线程,每当任务线程完成了自己的工作,就通知调度线程来取结果,这样才能够发挥出多线程的优势,而不是在那里傻等。
如果你把主线程当做调度线程,而你的主线程存在消息循环,那么,利用消息就是一个不错的通知方式。
任务线程完成了工作之后,向主线程发消息,消息中可以把任务线程本身(线程类)发给主线程,然后在主线程中取出这个线程类,然后得到任务线程的处理结果。
而最为主线程,只需要添加一个消息响应函数就可以了。