请教多线程的几个基本问题 ( 积分: 50 )

  • 主题发起人 主题发起人 dujr
  • 开始时间 开始时间
D

dujr

Unregistered / Unconfirmed
GUEST, unregistred user!
1、FreeOnTerminate:=False 和 FreeOnTerminate:=True 有什么区别,
2、Synchronize()是同步的意思吧,这样好吗
3、还有怎么样才能Free线程,在关闭线程的时候需要释放那些资源?
 
1、FreeOnTerminate:=False 和 FreeOnTerminate:=True 有什么区别,
2、Synchronize()是同步的意思吧,这样好吗
3、还有怎么样才能Free线程,在关闭线程的时候需要释放那些资源?
 
1。如果是线程类 区别太大了,如果没有使用类 默认的就是FreeOnTerminate:=True,线程终止时可以自己释放内存
2.把一个过程放到程序主线程里去执行,可以避免数据不同步
3.运行完了自己就释放了,不用管
 
FreeOnTerminate:=True表示线程结束时自动释放线程资源;
一般在VCL环境中应用Synchronize调用方法;
对于FreeOnTerminate=True的,线程结束即自动释放,否则可用Free方法释放啊;
建议楼主参考一下Delphi安装目录下的Thread例子.
 
是这样的,我在编写语音卡程序的时候用到多线程,就是为每个通道创建一个线程,可在关闭程序的时候却关不掉住程序,请问是什么原因?
 
呵呵,这个是多线程编程的常见问题,自己找一下线程中是否有死锁的代码。
 
猜想你用到了一个阻塞函数,线程阻塞在那里没有往下执行,没有执行完就终止不了?
 
datm,那怎么强行终止呢?下面是我的代码
while Truedo
begin
Application.ProcessMessages();
Sleep(100);
TrunkCh[ChNo].ScanATrunkCh();
if Terminated then
exit;
end;
 
TrunkCh[ChNo].ScanATrunkCh();
是什么?是不是没有语音卡传来数据线程就一直停在这里?如果是这样的话,没什么办法,它应该有一个超时属性之类的。
 
datm:可以和你聊聊吗,我的msn:dujr@msn.com
 
Sorry,我没有MSN.
而且正在上班,汗
 
那QQ:495854545也可以啊
 
//判断线程是否释放
//返回值:0-已释放;1-正在运行;2-已终止但未释放;
//3-未建立或不存在
//muhx
function TFrmMain.CheckThreadFreed(aThread: TThread): Byte;
var
i: DWord;
IsQuit: Boolean;
begin
if Assigned(aThread) then
begin
IsQuit := GetExitCodeThread(aThread.Handle, i);
if IsQuit then
//If the function succeeds, the return value is nonzero.
//If the function fails, the return value is zero.
begin
if i = STILL_ACTIVE then
//If the specified thread has not terminated,
//the termination status returned is STILL_ACTIVE.
Result := 1
else
Result := 2;
//aThread未Free,因为Tthread.Destroy中有执行语句
end
else
Result := 0;
//可以用GetLastError取得错误代码
end
else
Result := 3;
end;
 
while Truedo
begin
Application.ProcessMessages();
Sleep(100);
TrunkCh[ChNo].ScanATrunkCh();
if Terminated then
exit;
end;
如果Terminated为false你的程序不就一直停在这里了吗
 
1:表示设置线程运行完毕后,自动释放
2:是同步的意思,如果线程需要访问VCL,一定要用同步
3:把FreeOnTerminate:=True;
然后在线程中判断如果Terminated,那么EXIT;
 
后退
顶部