multithreading - AnonymousThread 的结果 - 怎么样?
问题描述
我尝试制作一个功能:
function MyFunction(parameter:string) : string;
begin
TThread.CreateAnonymousThread(procedure ()
var temp : string;
begin
temp := paramet;
//some works on temp variable
result := temp; <-- error here because it is a procedure
end).Start;
end;
如何让 MyFunction 在线程结束后返回临时变量?
我也试过这样:
function MyFunction(parameter:string) : string;
vat temp : string;
begin
TThread.CreateAnonymousThread(procedure ()
begin
temp := paramet;
//some works on temp variable
end).Start;
result := temp;
end;
这样它编译但返回一个空字符串。该函数返回结果并且不等待结束线程。
或者也许我做错了,因为我没有找到任何例子如何做到这一点?
解决方案
您不能使用新并行编程库中的 TTask.IFuture 吗?它以非常简洁和优雅的方式完全满足您的需求:
FutureObject := TTask.Future<Integer>(function: Integer
begin
Sleep(3000); // to simulate "background processing"
Result := 16; // result to be returned as "FutureObject.Value"
end);
MyValue := FutureObject.Value; // this waits for the value to be available, if it isn't yet
(示例取自这个 embarcadero wiki 页面http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Using_TTask.IFuture_from_the_Parallel_Programming_Library
推荐阅读
- node.js - NodeJS 和 body-parser
- amazon-web-services - 缺少 aws-Vault 凭据
- c - _CRT_SECURE_NO_WARNINGS 实际上是什么意思?
- c - 使用 strtok 时出现分段错误
- r - dplyr 在改变数据框时将日期转换为双精度
- php - 在 PHP 中迭代 JSON 键
- r - 在 R 中读取多个 xml 文件并合并数据时出现工作目录错误
- mysql - Docker-compose.yml for NodeJs with MySQL on AWS Elastic Beanstalk 单容器 Docker
- c# - 如果发件人是静态类或静态类中的对象,如何在 MessagingCenter.Send 中指定发件人?
- c# - ASP.NET web api 2 截断 json 响应