type
TLogOperate = class(TThread)
private
{ Private declarations }
protected
procedure LogSaveToDB;
procedure Execute; override;
public
constructor Create();
destructor Destroy; override;
end;implementation
{ TLogOperate }constructor TLogOperate.Create();
begin
FreeOnTerminate := True;
inherited Create(False);
end;destructor TLogOperate.Destroy;
begin
inherited;
end;procedure TLogOperate.Execute;
var
pOPLogTmp: pOPLog;
begin
{ Place thread code here }
Synchronize(LogSaveToDB);
end;procedure TLogOperate.LogSaveToDB;
var
pOPLogTmp: pOPLog;
begin
try
//写日志,看是否执行到
except
end;end;
我用32个别的线程同时启动这个线程,这时发现在procedure TLogOperate.LogSaveToDB;中的代码没有写日志,也是说在32个线程中启动的这个线程有些没有执行LogSaveToDB这条语句,是不是和Synchronize这个有关系,请高手指教,谢谢....
TLogOperate = class(TThread)
private
{ Private declarations }
protected
procedure LogSaveToDB;
procedure Execute; override;
public
constructor Create();
destructor Destroy; override;
end;implementation
{ TLogOperate }constructor TLogOperate.Create();
begin
FreeOnTerminate := True;
inherited Create(False);
end;destructor TLogOperate.Destroy;
begin
inherited;
end;procedure TLogOperate.Execute;
var
pOPLogTmp: pOPLog;
begin
{ Place thread code here }
Synchronize(LogSaveToDB);
end;procedure TLogOperate.LogSaveToDB;
var
pOPLogTmp: pOPLog;
begin
try
//写日志,看是否执行到
except
end;end;
我用32个别的线程同时启动这个线程,这时发现在procedure TLogOperate.LogSaveToDB;中的代码没有写日志,也是说在32个线程中启动的这个线程有些没有执行LogSaveToDB这条语句,是不是和Synchronize这个有关系,请高手指教,谢谢....
解决方案 »
- 有DELPHI2009后如何再装DELPHI2010
- "Invalid Parameter"的错误,一般是什么问题?
- 关于更新Access语句的奇怪错误,提示是语法错误
- 怎样把可执行文件发给别人之后立刻执行??
- 谁有ftp://210.77.19.200 中国科学院研究院的下载帐号和密码?
- 英格兰VS瑞士,猜中有200分。
- 用clientdataset控件存数据,出现未missing data provideror data packet是怎麽回事?
- 求高手解决!!!
- 请问怎样实现调用一个窗口后再回到主窗口?具体问题近来看看 在线等待 解决给分
- ???
- 递归实现树状结构(提高查询效率)
- 这个程序的类型定义错误了?
Synchronize的原理如下,你看一下,和你的代码联系起来,分析一下应该可以找到问题的所在,
在TThread中的Synchronize(),目的是通过它可以让线程的一些方法在主线程中执行。
Synchronize( )把由Method参数传递过来的方法保存在TThread的FMethod字段中,然后,给线程窗口发一个CM_EXECPROC消息,并且把消息的lParam参数设为self(这里指线程对象)。当线程窗口的窗口过程收到这个消息后,它就调用FMethod字段所指定的方法。由于线程窗口是在主线程内创建的,线程窗口的窗口过程也将被主线程执行。你那32个线程根据优先级等情况,还要设计到线程的调度,也许有的线程不是没有执行logsavetodb操作,而是根本就没有调度