查看: 304|回复: 3

delphi中基于事件通知的多线程应用

 关闭 [复制链接]

签到天数: 2090 天

连续签到: 2 天

[LV.Master]伴坛终老IIII

发表于 2009-3-18 10:54 | 显示全部楼层 |阅读模式
delphi中基于事件通知的多线程应用
  以前写过写多线程,往往是一个死循环中采用sleep来把释放cpu的时间片 ,这几天写了个基于Event通知的线程,应用起来还不错,就帖上来,希望大家多多指教,见笑了.
//------------------------------------------
  // 处理数据线程父类,实现方法由子类完成
  // Add by hua 2007/08/07
  //------------------------------------------
TPlayThread = class(TThread)
private
HEvent: THandle;
CS_Memory: TRTLCriticalSection ;
FData: array of byte;
FManager: TManager;
FMemory: TMemoryStream ;
FReadPos: integer;
procedure play; virtual;abstract;
function ReadData: Boolean; virtual ;
procedure ClearData;
public
constructor create(AManager: TManager);
destructor destroy; override;
procedure execute; override;
procedure WriteData(var ABuffer; ASize: DWORD); virtual ;
end;

  //视频数据处理线程
TVideoPlayThread = class(TPlayThread)
private
procedure play; override;
end;

  //音频数据处理线程
TAudioPlayThread = class(TPlayThread)
private
procedure play; override;
end;

  //礼物数据处理线程
TPresentPlayThread = class(TPlayThread)
private
CHAT_Present: TCHAT_Present;
function ReadData: Boolean; override;
procedure play; override;
public
procedure WriteData(var ABuffer; Asize: DWORD); override;
end;
implementation

  //以下为功能实现部分
{ TPlayThread }
procedure TPlayThread.ClearData;
begin
FReadPos := 0;
FMemory.Clear;
end;
constructor TPlayThread.create(AManager: TManager);
begin
InitializeCriticalSection(CS_Memory);
HEvent := CreateEvent(nil, False, False, nil);
FManager := AManager;
FMemory := TMemoryStream.Create;
FreeOnTerminate := true;
inherited Create(false);
PCOS系统下载站:http://zhuangji.wang

签到天数: 1323 天

连续签到: 0 天

[LV.10]以坛为家III

发表于 2009-5-9 18:04 | 显示全部楼层
问一下。楼主有没有delphi6的下载地址。我想学delphi
PCOS系统下载站:http://zhuangji.wang

签到天数: 2090 天

连续签到: 2 天

[LV.Master]伴坛终老IIII

 楼主| 发表于 2009-3-18 10:54 | 显示全部楼层

delphi中基于事件通知的多线程应用

delphi中基于事件通知的多线程应用
  以前写过写多线程,往往是一个死循环中采用sleep来把释放cpu的时间片 ,这几天写了个基于Event通知的线程,应用起来还不错,就帖上来,希望大家多多指教,见笑了.
//------------------------------------------
  // 处理数据线程父类,实现方法由子类完成
  // Add by hua 2007/08/07
  //------------------------------------------
TPlayThread = class(TThread)
private
HEvent: THandle;
CS_Memory: TRTLCriticalSection ;
FData: array of byte;
FManager: TManager;
FMemory: TMemoryStream ;
FReadPos: integer;
procedure play; virtual;abstract;
function ReadData: Boolean; virtual ;
procedure ClearData;
public
constructor create(AManager: TManager);
destructor destroy; override;
procedure execute; override;
procedure WriteData(var ABuffer; ASize: DWORD); virtual ;
end;

  //视频数据处理线程
TVideoPlayThread = class(TPlayThread)
private
procedure play; override;
end;

  //音频数据处理线程
TAudioPlayThread = class(TPlayThread)
private
procedure play; override;
end;

  //礼物数据处理线程
TPresentPlayThread = class(TPlayThread)
private
CHAT_Present: TCHAT_Present;
function ReadData: Boolean; override;
procedure play; override;
public
procedure WriteData(var ABuffer; Asize: DWORD); override;
end;
implementation

  //以下为功能实现部分
{ TPlayThread }
procedure TPlayThread.ClearData;
begin
FReadPos := 0;
FMemory.Clear;
end;
constructor TPlayThread.create(AManager: TManager);
begin
InitializeCriticalSection(CS_Memory);
HEvent := CreateEvent(nil, False, False, nil);
FManager := AManager;
FMemory := TMemoryStream.Create;
FreeOnTerminate := true;
inherited Create(false);
PCOS系统下载站:http://zhuangji.wang

签到天数: 2090 天

连续签到: 2 天

[LV.Master]伴坛终老IIII

 楼主| 发表于 2009-3-18 10:54 | 显示全部楼层

delphi中基于事件通知的多线程应用

delphi中基于事件通知的多线程应用
  以前写过写多线程,往往是一个死循环中采用sleep来把释放cpu的时间片 ,这几天写了个基于Event通知的线程,应用起来还不错,就帖上来,希望大家多多指教,见笑了.
//------------------------------------------
  // 处理数据线程父类,实现方法由子类完成
  // Add by hua 2007/08/07
  //------------------------------------------
TPlayThread = class(TThread)
private
HEvent: THandle;
CS_Memory: TRTLCriticalSection ;
FData: array of byte;
FManager: TManager;
FMemory: TMemoryStream ;
FReadPos: integer;
procedure play; virtual;abstract;
function ReadData: Boolean; virtual ;
procedure ClearData;
public
constructor create(AManager: TManager);
destructor destroy; override;
procedure execute; override;
procedure WriteData(var ABuffer; ASize: DWORD); virtual ;
end;

  //视频数据处理线程
TVideoPlayThread = class(TPlayThread)
private
procedure play; override;
end;

  //音频数据处理线程
TAudioPlayThread = class(TPlayThread)
private
procedure play; override;
end;

  //礼物数据处理线程
TPresentPlayThread = class(TPlayThread)
private
CHAT_Present: TCHAT_Present;
function ReadData: Boolean; override;
procedure play; override;
public
procedure WriteData(var ABuffer; Asize: DWORD); override;
end;
implementation

  //以下为功能实现部分
{ TPlayThread }
procedure TPlayThread.ClearData;
begin
FReadPos := 0;
FMemory.Clear;
end;
constructor TPlayThread.create(AManager: TManager);
begin
InitializeCriticalSection(CS_Memory);
HEvent := CreateEvent(nil, False, False, nil);
FManager := AManager;
FMemory := TMemoryStream.Create;
FreeOnTerminate := true;
inherited Create(false);
PCOS系统下载站:http://zhuangji.wang

本版积分规则