Delphi临界区的使用

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

 类:

 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临界区的使用

上一篇:delphi选择打印机打印


下一篇:C#记录日志、获取枚举值 等通用函数列表