码迷,mamicode.com
首页 > Windows程序 > 详细

Delphi临界区的使用

时间:2015-02-03 18:51:59      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

在开发一个平板点餐软件后台订单打印程序时,使用线程订单打印,为防打印阻塞使用临界区。

 类:

 type
  MYPARA=record
  title:pchar; //标题
  str:pchar;
  flag:integer; //标志
  end;
  PMYPARA=^MYPARA;

   

   

变量:   ThreadId1:DWORD;
         p:PMYPARA;

       CSprintjz:TRTLCriticalSection; {临界区信息}

       h2:THandle;

 

   

1.打印线程:

        {初始化打印单据参数}
         getmem(p,sizeof(p));//分配内存
         p.title:=‘结帐单‘;    //
         p.str:=‘‘;   //空 表示是第一次打印
         p.flag:=0;

   开启线程:

     h2:=CreateThread(nil, 0, @printjzdd,p,0, ThreadId1);

     

    线程函数printjzdd:

    

function   printjzdd(Para:PMYPARA):integer;stdcall;
  begin
  //showmessage(pchar(lp));
  {进入打印线程的临界区}
  EnterCriticalSection(CSprintjz);
  result:=-1;
   try
   new( Pprintoneember);
   Pprintoneember.No:=2;
   Pprintoneember.tt:=pchar(‘‘);
  // Pprintoneember.tt:=Para^.str;   //tt.转为 补打
   Pprintoneember.flag:=Para^.flag;
   Pprintoneember.tdh:=g_tdh;
   Pprintoneember.dd:=pchar(‘‘);
   Pprintoneember.Tno:=pchar(g_Tno);
   {打印订单}
   printdd_one(Pprintoneember);

   MainForm.Memo1.Lines.Add(‘启动打印订单线程‘);
   except
     LeaveCriticalSection(CSprintjz);
   MainForm.Memo1.Lines.Add(‘启动打印订单线程err‘);
   exit;
   end;
   MainForm.Refreshzp(1);
   MainForm.htsj(7);{统计营业额 }
   LeaveCriticalSection(CSprintjz);
    result:=1;

  end;

 

Delphi临界区的使用

标签:

原文地址:http://www.cnblogs.com/realhope/p/4270366.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!