多线程中的事件,解决办法
多线程中的事件,急
是这样的
用INDY的IdHTTPServer控件,用于实现一个HTTP服务器
每有一个客户端连接,就触发了IdHTTPServer的OnCommandGet事件
在这个事件中,我可以给客户端应答发送数据等,做一些处理。
用窗体来实现,是完全没什么问题的
现在的问题是,我想把这个HTTP服务器作为一个线程来用
也就是说,另外有一个主程序,在启动的时候创建一个IdHTTPServer的线程,专门用于应答客户端连接。
那么,OnCommandGet事件,怎样才能写到一个线程里面去呢???
------解决方案--------------------
把代码写在你自己定义的一个函数中,必须与oncommandget的函数一致,如YouFunc,然后用:
IdHTTPServer.OnCommandGet:=YouFunc;
------解决方案--------------------
可能还会有一个问题,线程区别于主线程的一个地方就是它没有消息循环,
不知道在线程里面用这个控件是否有问题。
------解决方案--------------------
没有问题的
你首先需要把idhttpserver所需要用到的单元全部引用进去。
然后复制IdHTTPServer的OnCommandGet过程的全部参数格式到线程单元。
就如这位兄弟所说
IdHTTPServer.OnCommandGet:=YouFunc;
其实可以一样的做成过程。完全跟form中使用一样的写一个处理过程
然后在idhttpserver开始工作之前将这个过程赋值给IdHTTPServer.OnCommandGet,代码写在线程单元的execute中。
2 是否INDY的TIdHTTPServer控件只能在窗体中使用,而线程中是不能使用的?
不是的,就是上面那样使用就可以了~!
接分~
------解决方案--------------------
请看这帖……
昨天我刚遇见的
http://community.****.net/Expert/topic/5337/5337121.xml?temp=.4690515
------解决方案--------------------
procedure TForm1.Button1Click(Sender: TObject);
var test:Ttest;
begin
Test:=Ttest.Create(false);
.....然后执行,不过你这样创建线程,好像少了消息等待,不然线程执行就结束了!
end;
是这样的
用INDY的IdHTTPServer控件,用于实现一个HTTP服务器
每有一个客户端连接,就触发了IdHTTPServer的OnCommandGet事件
在这个事件中,我可以给客户端应答发送数据等,做一些处理。
用窗体来实现,是完全没什么问题的
现在的问题是,我想把这个HTTP服务器作为一个线程来用
也就是说,另外有一个主程序,在启动的时候创建一个IdHTTPServer的线程,专门用于应答客户端连接。
那么,OnCommandGet事件,怎样才能写到一个线程里面去呢???
------解决方案--------------------
把代码写在你自己定义的一个函数中,必须与oncommandget的函数一致,如YouFunc,然后用:
IdHTTPServer.OnCommandGet:=YouFunc;
------解决方案--------------------
可能还会有一个问题,线程区别于主线程的一个地方就是它没有消息循环,
不知道在线程里面用这个控件是否有问题。
------解决方案--------------------
没有问题的
你首先需要把idhttpserver所需要用到的单元全部引用进去。
然后复制IdHTTPServer的OnCommandGet过程的全部参数格式到线程单元。
就如这位兄弟所说
IdHTTPServer.OnCommandGet:=YouFunc;
其实可以一样的做成过程。完全跟form中使用一样的写一个处理过程
然后在idhttpserver开始工作之前将这个过程赋值给IdHTTPServer.OnCommandGet,代码写在线程单元的execute中。
2 是否INDY的TIdHTTPServer控件只能在窗体中使用,而线程中是不能使用的?
不是的,就是上面那样使用就可以了~!
接分~
------解决方案--------------------
请看这帖……
昨天我刚遇见的
http://community.****.net/Expert/topic/5337/5337121.xml?temp=.4690515
------解决方案--------------------
procedure TForm1.Button1Click(Sender: TObject);
var test:Ttest;
begin
Test:=Ttest.Create(false);
.....然后执行,不过你这样创建线程,好像少了消息等待,不然线程执行就结束了!
end;