采用同步方式封装异步操作(AutoResetEvent)
2008-09-05 14:00
267 查看
在C/S模式程序开发中需要实现一个函数,比如:
Code
AutoResetEvent autoEvent = new AutoResetEvent(false); //将初始状态设置为非终止
/// <summary>
/// 根据用户 ID 查询用户名
/// </summary>
/// <param name="id">用户 ID</param>
/// <returns>用户名</returns>
public string GetUserName(int id)
{
/*
* 这里放置请求封包构造代码
*/
byte[] data=packet.GetData();
s.Send(data);
if (autoEvent.WaitOne(5000, false)) //这里定义了 5 秒的超时时间
{
return result; //这个是示例,result 从 RecvUserName 中进行赋值
}
else
{
throw new Exception("服务器查询超时!");
}
}
/*
*当 socket 读取线程读取到 Server 返回的用户名信息的封包头信息后调用 RecvUserName 函数
* socket 读取线程部分代码略
*/
/// <summary>
/// 接收服务器返回信息
/// </summary>
private void RecvUserName()
{
/*
* 这里编写封包拆解代码
*/
result = username;
autoEvent.Set(); //将事件状态设置为终止状态,允许等待线程继续。
}
搞定!
这样的话 GetUserName 函数在执行 s.Send(data); 后会被挂起,直到超时或者 autoEvent 的事件状态被设置为终止状态。
然后才会执行之后的代码。
这样就能通过
string username=GetUserName(10); 这样的调用方式来返回用户名信息了。
这里只是简单说了下实现方法,其它具体的逻辑关系处理大家自己去想了,呵呵!
Code
AutoResetEvent autoEvent = new AutoResetEvent(false); //将初始状态设置为非终止
/// <summary>
/// 根据用户 ID 查询用户名
/// </summary>
/// <param name="id">用户 ID</param>
/// <returns>用户名</returns>
public string GetUserName(int id)
{
/*
* 这里放置请求封包构造代码
*/
byte[] data=packet.GetData();
s.Send(data);
if (autoEvent.WaitOne(5000, false)) //这里定义了 5 秒的超时时间
{
return result; //这个是示例,result 从 RecvUserName 中进行赋值
}
else
{
throw new Exception("服务器查询超时!");
}
}
/*
*当 socket 读取线程读取到 Server 返回的用户名信息的封包头信息后调用 RecvUserName 函数
* socket 读取线程部分代码略
*/
/// <summary>
/// 接收服务器返回信息
/// </summary>
private void RecvUserName()
{
/*
* 这里编写封包拆解代码
*/
result = username;
autoEvent.Set(); //将事件状态设置为终止状态,允许等待线程继续。
}
搞定!
这样的话 GetUserName 函数在执行 s.Send(data); 后会被挂起,直到超时或者 autoEvent 的事件状态被设置为终止状态。
然后才会执行之后的代码。
这样就能通过
string username=GetUserName(10); 这样的调用方式来返回用户名信息了。
这里只是简单说了下实现方法,其它具体的逻辑关系处理大家自己去想了,呵呵!
相关文章推荐
- 采用用同步编程的方式实现跨进程异步获取数据
- 采用用同步编程的方式实现跨进程异步获取数据[二]-创建玩家账号和获取角色列表
- 采用用同步编程的方式实现跨进程异步获取数据[一]
- Android 异步方法以同步方式进行
- AJAX中的请求方式以及同步异步的区别
- SQLite操作封装-长连接方式
- Winform开发中耗时操作封装用异步执行(.net 4.0)
- 同步异步网络请求封装以及数据JSON解析
- 6.对数组进行排序、求最大值和求元素和的函数采用静态成员函数的方式封装成数组算法类模板ArrayAlg,并采用相关数据进行测试。
- node 操作文件流 fs 同步与异步 流式文件的写入与读取
- 百度地图API之地图加载方式(同步、异步)
- android 异步回调中操作UI线程,UI同步、卡死阻塞等性能问题
- c#操作excel方式二:采用OleDB操作Excel文件
- Android 两种异步操作方式
- 异步和同步的适用方式
- VC文件的读写操作中的同步和异步
- XMLHttpRequest 异步方式和同步方式
- VC 多线程异步方式操作串口
- 使用异步方式调用同步方法
- 使用异步方式调用同步方法