begin
TProc(procedure() var
c: CChannel<Integer>; //声明一个通道,它可以携带一个整型数据。
i: Integer; begin
c:=CChannel<Integer>.Create;
for i:=1 to 5 do //创建五个任务线程,并立即开始工作。
go( //在go语言里,有一个go关键字,用于把一个函数以goroutine方式运行,这里使用了go语言的风格,用一个go函数代替。 procedure() begin
Sleep(1000); //假设这个任务比较复杂,花费了一秒时间。
c.value:=1; //任务完成后,给通道一个值,这个值是多少在这个示例里不重要,它仅仅是给出一个信号:我完成了 end);
for i:=1 to 5 do //对这五个任务判定是否已完成
c.value; //当value有值时,这句才能读到,否则就等待
Writeln('全部完成');
c.Free; end)();