S
syy_sxd
Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TMainForm.FormCreate(Sender: TObject);
var
i: Integer;
begin
//创建同步用的信号量
SyncEmpty := CreateSemaphore(nil, 1, 2,nil);
SyncFull := CreateSemaphore(nil, 1, 2,nil);
//创建临界区
MutexAccess := TCriticalSection.Create;
//创建队列
Queue := TQueue.Create;
//创建空闲空间栈,自行进行内存分配
FreeBuff := TStack.Create;
//分配足够的动态空间
SetLength(Buffers, MaxSize + 1);
//降所有空间入栈,空闲一个首位置
for i := MaxSizedo
wnto 1do
FreeBuff.Push(Ptr(i));
//创建线程对象
//showmessage(inttostr(FreeBuff.Count));
SendThread := TSendThread.Create;
//初始化线程变量
SendThread.MutexAccess := MutexAccess;
SendThread.Queue := Queue;
SendThread.FreeBuff := FreeBuff;
//动态数组的赋值不会引起分配内存
//而是两个变量引用同一数组
//SendThread.Buffers:=Buffers;
//关联显示对象
SendThread.Memo1:=Memo1;
SendThread.Resume;
end;
出现'list index out of bounds(-1)'的错误! 其中MaxSize=10
var
i: Integer;
begin
//创建同步用的信号量
SyncEmpty := CreateSemaphore(nil, 1, 2,nil);
SyncFull := CreateSemaphore(nil, 1, 2,nil);
//创建临界区
MutexAccess := TCriticalSection.Create;
//创建队列
Queue := TQueue.Create;
//创建空闲空间栈,自行进行内存分配
FreeBuff := TStack.Create;
//分配足够的动态空间
SetLength(Buffers, MaxSize + 1);
//降所有空间入栈,空闲一个首位置
for i := MaxSizedo
wnto 1do
FreeBuff.Push(Ptr(i));
//创建线程对象
//showmessage(inttostr(FreeBuff.Count));
SendThread := TSendThread.Create;
//初始化线程变量
SendThread.MutexAccess := MutexAccess;
SendThread.Queue := Queue;
SendThread.FreeBuff := FreeBuff;
//动态数组的赋值不会引起分配内存
//而是两个变量引用同一数组
//SendThread.Buffers:=Buffers;
//关联显示对象
SendThread.Memo1:=Memo1;
SendThread.Resume;
end;
出现'list index out of bounds(-1)'的错误! 其中MaxSize=10