多线程问题,请教大侠(30分)

  • 主题发起人 主题发起人 jxa
  • 开始时间 开始时间
J

jxa

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个多线程
为什么执行一阵子程序就会跟死机了一样
只有“结束程序”才能关掉
没分了
 
代码贴出来看才能知道你对它做了什么 :)
 
创建互斥对象和线程
var
hMutex: THandle;
constructor TSendTread.Create(Suspended: Boolean;
Name: String);
begin
hMutex := CreateMutex (nil, false, pChar(Name));
inherited Create(Suspended);
FreeOnTerminate:=True;
end;
执行线程
procedure TSendTread.Execute;
begin
while not Terminateddo
begin
try
Sleep(60000);
WaitForSingleObject (hMutex, INFINITE);
Synchronize (SendNote);
finally
ReleaseMutex(hMutex);
end;
end;
end;
SendNote是一个过程
定时向数据库添加数据
 
要用WaitForSingleObject (hMutex, INFINITE);
就不要用Synchronize (SendNote);这两个冲突,造成线程死锁
最好把WaitForSingleObject (hMutex, INFINITE);
去掉。
 
我去掉了
但还是这样
 
线程没有杀死吧.
 
To:fxh7622
怎么杀死
 
我一般使用的是API创建线程,然后杀死掉.ExitThread(0);
 
hehe,大家讨论的这么热烈,偶说句不当说的话:
楼主,看看您线程中的代码,唯一干活的一句话就是Synchronize (SendNote);没有任何异步执行的语句,这还要线程干什么呀。干脆用个定时器得了。
 
我共定义了两个线程
我只贴出了一个
请教LeeChange
我是初学者
怎样处理线程对共享数据的访问
我的另一个线程中也是对数据库的操作
谢谢!
请贴出源代码
 
WaitForSingleObject (hMutex, INFINITE);去掉或者应该放在循环外面?晚上仔细看看哈。
 
不知道跟Sleep(60000)有没有关系。因为,在线程中放入Sleep不会是明智的吧
 
将Sleep(60000)改成
For I:=0 to 6000do
Application.ProssMessage;
 
是因为WaitForSingleObject (hMutex, INFINITE)的缘故,你退出时设置一下hMutex,使其产生信号。
 
后退
顶部