作者cole945 (躂躂..)
看板C_Sharp
标题Re: [问题] 这种状况,表示得用多执行绪吗
时间Fri May 30 11:57:41 2008
※ 引述《teamspike (市政府7F)》之铭言:
: 查了一下说明,原来AcceptSocket()会锁定程式执行,
看你的设计, 不一定要由你自己开一个 thread 去处理,
其中一个方案是使用 BeginAcceptSocket()与EndAcceptSocket()
就变成如果 socket accpet到client, 才去呼叫你指定的callback funtion
这样就不会卡住了~
在 .NET 几乎所有这种会 block 很久的呼叫, 都会有对应的 BeginXXX()与EndXXX()
非同步呼叫可以使用
观念上是这类 event-driven的系统大多由一个 Message Loop 来实作..
当你按下 buttonConnect 与 buttonDisconnect 时,
就将 他们的 OnClick 讯息放进一个 Message Queue 中, 然後有个像这样子的loop
while( MessageQueue 中还有讯息 ) {
Message = MessageQueue.Dequeue();
switch( Message.Type) {
case OnClick:
依 传送者 呼叫对应的
buttonConnect_OnClick() 或 buttonDisConnect_OnClick()
case OnXXXXX;
/* 各种讯息及其处理的方式 */
}
}
所以 MessageLoop 一进到你的 buttonConnect_OnClick() 後, 在return前,
就没办法处理其他的 Message 了~
包括把视窗界面重绘, 所以你会看到视窗白白的, 好像当掉的样子..
不过你要注意, 虽然使用 BeginXXXX() 这类的非同步呼叫,
就不会卡在 OnClick 的时候. 可是 OnAccept 仍是使用MessageLoop来处理,
所以你的callback function 也要尽快处理後续的工作以免卡到别人..
若没有可使用的非同步呼叫, 那你就要用 thread 来解决了..
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.139.142.70
1F:推 teamspike:cool...现在就来试试看 05/30 15:56