CnPack 开源软件项目 - 在Delphi XE中使用go语言的并发编程方法之Demo2
  网站首页 下载中心 每日构建 文档中心 公益基金 开发论坛 关于我们 致谢名单 English


 Google 搜索

内容: 
 最新下载包


 
CnWizards 1.1.5.946
[2018-11-01]

 
CnVCL 组件包 20181101
[2018-11-01]

 
CVSTracNT 多语言版 V2.0.1_20080601
[2008-06-02]

 
CVSTrac Linux 中文版 V1.2.1_20060112
[2006-01-12]
  最新开发版下载 RSS
  项目时间线 RSS RSS
 项目相关链接

CnPack GitHub 首页
GIT 使用说明
申请加入 CnPack
CnPack 成员名单
CnPack 邮件系统
 网站访问量

今日首页访问: 1092
今日页面流量: 3663
全部首页访问: 3439487
全部页面流量: 12804185
建站日期: 2003-09-01

在Delphi XE中使用go语言的并发编程方法之Demo2

CnPack 开源软件项目 2010-12-08 19:58:34

在delphi中使用go语言的并发编程方法,增加demo2
作者:早安·空气

上一篇(论坛原始链接:http://bbs.cnpack.org/viewthread.php?tid=9514&extra=page%3D1)只提供了一个示例,可能不太容易说明什么,这里再增加一个例子。
    {这个示例演示了经典的生产消费问题。
    go的教程里就这个问题提供了一个Eratosthenes素数筛选法的例子,这里简化一下,演示筛选偶数吧}

我习惯把begin写成同一行,可能很多人不习惯。而这个问题在go语言里消失了,因为它要求{不能换行。

program demo2;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  coroutineUnit;

//bug反馈:22140505@qq.com

begin
    TProc(procedure()
    var
        i: Integer;
        c: CChannel<Integer>; //声明一个通道,它可以携带一个整数,用于在两个线程之间传递
    begin
    c:=CChannel<Integer>.Create;
    go( //启动生产线程
        procedure()
        var
            i: Integer;
        begin
        for i:=1 to 10 do //制作10个整数作为产品(好弱。。),交给产生线程
            c.value:=i;
        c.value:=-1; //为-1时表示生产结束了(这属于这个模型的协议,我随意规定的)
        end);
    go(  //启动消费线程,它不停的接收整数产品,判断并输出为偶数的值
        procedure()
        var
            i: Integer;
        begin
        while true do begin //不停的处理,但cpu消耗不高
            i:=c.value;  //接收产品,如果没收到,就停在这等
            if i=-1 then begin //为-1时表示生产结束了(这属于这个模型的协议,我随意规定的)
                c.Free;
                break;
                end;
            if i mod 2=0 then
                writeln(inttostr(i));
            end;
        end);
    end)();

Readln;
end.

注:coroutineUnit.pas请见上一篇文章的附件。


相关下载:
在Delphi XE中使用go语言的并发编程方法的例子之二 (已下载 1802 次)

本文已阅读 10005 次
来自: CnPack 开源软件项目

上一主题 | 返回上级下一主题

相关主题:


版权所有(C) 2001-2018 CnPack 开发组 网站编写:Zhou Jinyu