W
windlian
Unregistered / Unconfirmed
GUEST, unregistred user!
最近在开发语音卡的程序,遇到关于线程的问题,想大家指教一下!先谢了:)
我的想法是一个语音卡有n个通道(channel),为每个channel, Create一个线程。
线程的作用是检测当前通道的状态,并根据当前工作的状态,进行检测,拨号,挂机等操作。
于是写了一个TDialThread Class
procedure TDialThread.Execute;
begin
while Truedo
begin
Application.ProcessMessages();
do
Work(FChannelNo);
end;
end;
constructor TDialThread.Create(Suspended : Boolean;
ChannelNo : Integer);
begin
inherited Create(Suspended);
FChannelNo := ChannelNo;
FreeOnTerminate := True;
end;
可是现在有下面的问题:
1、这样用线程好吗?其实我之前是用一个Timer来不断地运行DoWork()的;
2、我这张语音卡的语音通道有16个,如果用每个通道分配一个线程的话,会不会消耗太大?
3、还有就是,为什么我的Form是非激活状态后,再激活时,会死掉?
4、为什么Close Form时(在OnClose中结束线程),也会死掉?
////////////////////////////////////////////////////////////////////////////////
PS:对于3、4来说,如果在窗体内点击啊这些操作都没问题!奇怪!为此,我还在每个线程中
放一个Counter,窗体上有一个Button,OnClick中显示Counter,都很正常。
////////////////////////////////////////////////////////////////////////////////
5、如果在每个线程中都要访问数据库,有什么问题吗?对数据库的操作是修改,但是肯定不会
对同一个记录修改。我用ADO来连SQL SERVER的,好吗?
6、还有..........,还没想到![]
如果回答满意可以再加分!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
我的想法是一个语音卡有n个通道(channel),为每个channel, Create一个线程。
线程的作用是检测当前通道的状态,并根据当前工作的状态,进行检测,拨号,挂机等操作。
于是写了一个TDialThread Class
procedure TDialThread.Execute;
begin
while Truedo
begin
Application.ProcessMessages();
do
Work(FChannelNo);
end;
end;
constructor TDialThread.Create(Suspended : Boolean;
ChannelNo : Integer);
begin
inherited Create(Suspended);
FChannelNo := ChannelNo;
FreeOnTerminate := True;
end;
可是现在有下面的问题:
1、这样用线程好吗?其实我之前是用一个Timer来不断地运行DoWork()的;
2、我这张语音卡的语音通道有16个,如果用每个通道分配一个线程的话,会不会消耗太大?
3、还有就是,为什么我的Form是非激活状态后,再激活时,会死掉?
4、为什么Close Form时(在OnClose中结束线程),也会死掉?
////////////////////////////////////////////////////////////////////////////////
PS:对于3、4来说,如果在窗体内点击啊这些操作都没问题!奇怪!为此,我还在每个线程中
放一个Counter,窗体上有一个Button,OnClick中显示Counter,都很正常。
////////////////////////////////////////////////////////////////////////////////
5、如果在每个线程中都要访问数据库,有什么问题吗?对数据库的操作是修改,但是肯定不会
对同一个记录修改。我用ADO来连SQL SERVER的,好吗?
6、还有..........,还没想到![]
如果回答满意可以再加分!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!