这段多线程代码为什么不稳定
求助:这段多线程代码为什么不稳定?
先描述一下情况:
程序用一按钮启动定时器(触发间隔5秒),定时器内循环创建8个线程,传递多个参数。线程函数就是在内存里面创建一个位图,然后写字。程序运行几分钟,或十几分钟后就会崩溃,无法定位出错点。
线程内的代码都是局部变量,也没有操作窗口上面的控件,我就不明白为什么不稳定?
初学delphi不久,折腾了一个星期无果,来此求助。不胜感激。
全部代码就这么点:
先描述一下情况:
程序用一按钮启动定时器(触发间隔5秒),定时器内循环创建8个线程,传递多个参数。线程函数就是在内存里面创建一个位图,然后写字。程序运行几分钟,或十几分钟后就会崩溃,无法定位出错点。
线程内的代码都是局部变量,也没有操作窗口上面的控件,我就不明白为什么不稳定?
初学delphi不久,折腾了一个星期无果,来此求助。不胜感激。
全部代码就这么点:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
Image1: TImage;
Button2: TButton;
Image2: TImage;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
PParData = ^TParData;
TParData = record
cardNum:Integer;
stationName:string;
trunkNo:string;
relatedFormID:string;
materialName:string;
taskState:string;
materialNum:Integer;
sl1:integer;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=True;//启动定时器
end;
function LEDThread(AParData: PParData):Boolean; stdcall;
var
txtRect: Trect;
fontObj: Longint;
hBrush: Longint;
memDC: Longint;
hDisplayDC: Longint;
newBitmap: Longint;
oldpBitmap: Longint;
myFont: Longint;
oneItem:string;
begin
hDisplayDC := GetDC(0);
memDC := CreateCompatibleDC(hDisplayDC);
newBitmap := CreateCompatibleBitmap(hDisplayDC, 320, 96);
oldpBitmap := SelectObject(memDC, newBitmap);
SetBkMode(memDC, TRANSPARENT);
hBrush := CreateSolidBrush(0);
FillRect(memDC, txtRect, hBrush);
DeleteObject(hBrush);