讨论 & 请教(200分)

  • 主题发起人 主题发起人 windlian
  • 开始时间 开始时间
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、还有..........,还没想到![:D]
如果回答满意可以再加分!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
我发现Execute里有个死循环,你有没有在相关地方结束线程?
 
在MainForm Close 时,关闭线程
 

while Truedo
begin

// Application.ProcessMessages();
-> Sleep(X);//能极大降低系统消耗
-> Checkifclose then
Terminatethread;//能更保险点结束thread
do
Work(FChannelNo);
end;

另外,在窗体关闭[red]前[/red],应该close all threads
 
嘻嘻!你是用什么语音卡呀?
我刚刚完成了一个这样的系统!
 
为什么用线程检测,而不是利用消息机制?
卡不是有可以传递几个特定的消息的么?
 
To OldTiger:
我用的是东进的D160A语音卡,你的系统是做什么的?可以给我参考吗?(会不会太贪心了,:P)
不盛感激!!!!
To zzzy04:
消息是可以啊,但是是对某一个通道而言,我不想用轮询的方式。想用多线程,让各个线程
对各自通道进行语音检测,拨号等功能。
 
呵呵!我用的也是D160A-8T8U呀!你要看什么呢?
多多交流!
 
线程不可多用,象你这种情况恐怕不能用线程,数量太多,无法调度
 
To zhujianzhou;
其实也不会很多的,因为只是要求拨出,而这种语音卡是8I/8O的所以最多也不过8个线程再
加上主的那个,一共9个,应该不是很多吧。
To Oldtiger:
嘻嘻,我当然想要全部的源程序啦,不过这显然是不可能的。总之,看你的啦,你喜欢给多少就
多少,我的邮箱是WindLian@21cn.com。
你的那个程序有那些功能啊?
 
nunimao的sleep()
试了一下效果不错,先给50分奖励,但是还有其他的问题呢???
怎么不回答啊?
 
这样吧,你先听听效果如何?
电话:0774-2825614
身份证号:450404410507061
密码:2222
另外,我的整套系统就是用线程实现的,每条电话线配一个线程服务,
现在是8外线
我想先听听你的评价,说好说坏都没关系,为的是以后能改进出一个更好的版本
你评价完了我们再谈程序,好不好?
 
大哥,怎么是长途啊!!!!
sigh,现在正穷的要命!!!
有没有其他途径啊?
 
呵呵!你不会用IP电话呀?17909-
收信吧!给点分呀!
:):)
 
后退
顶部