要将有关处理状态的信息写入 tcpserver.onexecute(..) 函数内的 GUI,我使用了以下命令序列
ExecuteDUMMYCommand(Global_Send_Record);
BitMap_PaintImageProcess;
TThread.Synchronize(nil, BitMap_PaintImageProcess);
该代码在某些机器上运行良好,但在少数机器上却失败了。代码执行在 TThread.Synchronize 命令处停止。我猜在这些机器上,函数调用被困在死锁中 有机会找出背后的真正问题吗?
程序 BitMap_PaintImageProcess ,在这里我创建了一个 Bitmap 并做了很多绘画的东西,但似乎这段代码从未执行过?
我试图解释很长的代码并简化为要点,关键的线程问题隐藏在处理我的 Bitmapprocessingclass 中的位图中。这个类是在我的 ServerMainForm 的 GUIProcessing 过程中访问的,它也有 INDY TCP Server 组件。
{--------------- CLASS DEFINITION -----------------------------}
TBitMapProcessingClass = class()
FBitmap : TBitmap;
FList : TListOfSomething;
procedure ProcessTheBitmap(....);
......
(many many functions);
procedure Init;
procedure Free;
Procedure Create;
end;
TMainform = class(TForm)
MyServer : TIdTCPServer;
aBitMaoProcessingClass : TBitMaoProcessingClass;
procedure BitMap_PaintImageProcess;
procedure BitMap_ListProcess;
.....
end;
{------------------------- Implemantation ------------------------------}
procedure TMainform.IndyTCPServer.Onexecute()
begin
.......
ExecuteDUMMYCommand(Global_Send_Record);
BitMap_PaintImageProcess;
TThread.Synchronize(nil, BitMap_PaintImageProcess);
.......
end;
procedure TMainform.BitMap_PaintImageProcess;
begin
DoSomeServerVCLStuff(....);
aBitMapProcessingClass.ProcessTheBitmap;
DoSomeServerVCLStuff(....);
end;