【发布时间】:2014-05-27 18:50:46
【问题描述】:
Andy 开发的这个库AsynCalls 给我留下了深刻的印象。
我写了一段代码只是为了测试这个库,但它总是获取内存 A/V,我是不是漏掉了什么?
以下代码旨在使用两个异步线程并行这个简单的任务(从数组中获取最大值)。
program Test;
{$APPTYPE CONSOLE}
uses
SysUtils,
Math,
Windows,
Forms,
AsyncCalls in 'AsyncCalls.pas';
var
arr: array of integer;
i: integer;
procedure GetMax(const arr: array of integer; left, right: integer; var max: integer);
var
i: integer;
begin
max := arr[left];
for i := left + 1 to right do
begin
if (arr[i] > max) then
begin
max := arr[i];
end;
end;
end;
const
N = 100000;
var
a, b: IAsyncCall;
maxv, max1, max2: integer;
begin
SetLength(arr, N);
maxv := -1;
for i := 0 to High(arr) do
begin
arr[i] := RandomRange(0, MaxInt);
if (arr[i] > maxv) then
begin
maxv := arr[i];
end;
end;
a := AsyncCall(@GetMax, [arr, 0, Length(arr) div 2, max1]);
b := AsyncCall(@GetMax, [arr, (Length(arr) div 2) + 1, High(arr), max2]);
while (AsyncMultiSync([a, b], True, 10) = WAIT_TIMEOUT) do
begin
Application.ProcessMessages;
end;
Writeln(max1, ', ', max2, ', ', Max(max1, max2));
Writeln(maxv);
Readln;
end.
【问题讨论】:
-
你为什么在控制台应用程序中调用
ProcessMessages? -
没关系,我去掉了,还是会造成A/V
-
为卓越的 SSCCE +1!
标签: delphi