C#多线程数据分布加载
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using SocketIM;
using System.Net;
using System.Net.Sockets;
using ConsoleApplication1;
using System.Runtime.Remoting.Messaging;
using System.Threading;
namespace ConsoleApplication2
{
public interface IIMCallBack
{
void IMCallBack(byte[] data);
}
public class ServerHandler : IIMCallBack
{
public void IMCallBack(byte[] data)
{
string str = System.Text.Encoding.UTF8.GetString(data);
var dic = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(str);
if (dic["MessageType"] == "")
{
Console.WriteLine();
}
else if (dic["MessageType"] == "")
{
Console.WriteLine(); }
System.Threading.Thread thread = new System.Threading.Thread(StartListening);
thread.IsBackground = true;
thread.Start();
} public static void StartListening()
{
//byte[] bytes = new Byte[1024]; IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, );
// Create a TCP/IP socket.
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// Bind the socket to the local
//endpoint and listen for incoming connections.
try
{
listener.Bind(localEndPoint);
listener.Listen();
while (true)
{ listener.BeginAccept(new AsyncCallback(AcceptCallback), listener); }
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Console.WriteLine("\nPress ENTER to continue...");
Console.Read();
} public static void AcceptCallback(IAsyncResult ar)
{ Socket listener = (Socket)ar.AsyncState;
Socket handler = listener.EndAccept(ar); byte[] buff = new byte[]; while (true)
{
handler.BeginReceive(buff, , , , new AsyncCallback(ReadCallback),handler);
}
} public static void ReadCallback(IAsyncResult ar)
{
String content = String.Empty;
// Retrieve the state object and the handler socket
// from the asynchronous state object.
Socket state = (Socket)ar.AsyncState; // Read data from the client socket.
int bytesRead = state.EndReceive(ar);
byte[] buff = new byte[]; }
}
}
public delegate int AddEvent(int a, int b);
class Program
{
public class StateObject
{
public string key { get; set; }
public bool state { get; set; } }
public static List<int> bags = new List<int>();
static void Main(string[] args)
{
ManualResetEvent t = new ManualResetEvent(false);
Dictionary<int, StateObject> dicDone = new Dictionary<int, StateObject>();
dicDone.Add(, new StateObject() { key="",state=false });
dicDone.Add(, new StateObject() { key = "", state = false });
dicDone.Add(, new StateObject() { key = "", state = false }); AddEvent add = (a, b) =>
{
int r= a + b;
bags.Add(r); return r;
}; add.BeginInvoke(, , callback, dicDone[]); add = (a, b) =>
{
int r = a + b;
bags.Add(r); return r;
}; add.BeginInvoke(, , callback, dicDone[]); add = (a, b) =>
{
Thread.Sleep();
int r = a + b;
bags.Add(r); return r;
}; add.BeginInvoke(, , callback, dicDone[]);
Thread th = new Thread((o) =>
{ while (true)
{
int cx = dicDone.Keys.Count;
int x = ;
foreach (var item in dicDone)
{
if (item.Value.state == true)
{
x++; } }
if (x == cx)
{
t.Set();
Console.WriteLine("resutl is:");
foreach (var item in bags)
{
Console.WriteLine(item);
}
break;
} } });
th.Start();
t.WaitOne(); Console.WriteLine("队列完成!!"); //SocketTest.Send("127.0.0.1", 11000, "www.jb51.net");
Console.Read();
} private static void callback(IAsyncResult ar)
{
var handler = (AddEvent)((AsyncResult)ar).AsyncDelegate; var state = ar.AsyncState as StateObject;
state.state = true;
Console.WriteLine(state.key+"线程放行!!");
Console.WriteLine(ar.AsyncState);
}
}
C#多线程数据分布加载的更多相关文章
- Android 多线程 异步加载
Android 应用中需要显示网络图片时,图片的加载过程较为耗时,因此加载过程使用线程池进行管理, 同时使用本地缓存保存图片(当来回滚动ListView时,调用缓存的图片),这样加载和显示图片较为友好 ...
- C# 多线程 异步加载 窗体
C# 多线程 异步加载 窗体 分类: C#2014-05-28 16:57 1286人阅读 评论(0) 收藏 举报 异步加载 我们在使用 windowform 编程的时候,我们或许可能会越到,各种在窗 ...
- 多线程异步加载图片async_pictures
异步加载图片 目标:在表格中异步加载网络图片 目的: 模拟 SDWebImage 基本功能实现 理解 SDWebImage 的底层实现机制 SDWebImage 是非常著名的网络图片处理框架,目前国内 ...
- JAVA多线程超时加载当网页图片
先上图: 这一次没有采取正则匹配,而采取了最简单的java分割和替代方法进行筛选图片 它能够筛选如下的图片并保存到指定的文件夹 如: “http://xxxx/xxxx/xxx.jpg” 'http: ...
- ImageLoader(多线程网络图片加载)+本地缓存 for windowsphone 7
搞了好长一阵子wp,做点好事. C/S手机app中应用最多的是 获取网络图片,缓存到本地,展示图片 本次主要对其中的delay:LowProfileImageLoader进行修改,在获取图片的时候, ...
- Android ListView避免多线程加载一个同一资源
当我们的ListView中的Item包含图片,而且这些图片是同一资源,我们用多线程去加载图片,这时候可能就发生了这种情况. 比如线程是人,第一个人去做加载图片到缓存的工作,还没做好时第二个人要这同一张 ...
- 使用multiprocessing解决PyMuPDF不支持多线程加载导致的界面卡死无响应问题,及一个PyQt5实现的简易PDF阅读器例子
最近在用PyMuPDF实现一个PDF阅读器,发现PyMuPDF在加载某些epub时耗时非常长,有的长达10几秒,会导致界面卡死无响应. 尝试用多线程后台加载,发现还是不能解决问题,和作者交流(issu ...
- android ImageLoader 混淆加载drawable出现黑色图片的解决方案
在网上找了很久,没有找到.后来看了源码才知道... 多线程异步加载和显示图片(图片来源于网络.sd卡.assets文件夹,drawable文件夹(不能加载9patch),新增加载视频缩略图) Stri ...
- ImageLoader图片加载
http://blog.csdn.net/liu1164316159/article/details/38728259 转载请注明http://write.blog.csdn.net/po ...
随机推荐
- HDU2888 Check Corners(二维RMQ)
有一个矩阵,每次查询一个子矩阵,判断这个子矩阵的最大值是不是在这个子矩阵的四个角上 裸的二维RMQ #pragma comment(linker, "/STACK:1677721600&qu ...
- 转 HTTP.SYS 详解
http.sys 是一个位于Win2003和WinXP SP2中的操作系统核心组件, 能够让任何应用程序通过它提供的接口,以http协议进行信息通讯. 温馨提示:如果用户不慎删除了该驱动文件,不用担心 ...
- POJ3259 Wormholes 【Bellmanford推断是否存在负回路】
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011775691/article/details/27612757 非常easy的bellmanf ...
- 使用位图文本工具BMFont从图片生成自定义字体
bmfont工具如何使用 http://www.360doc.com/content/13/1206/12/14253074_334930801.shtml fnt各属性含义 http://www.2 ...
- 解决Mybatis没有代码提示
MyBatis xml文件中代码自动提示 工具/原料 eclipse,maven 方法/步骤 1 一.获得mybatis-3-config.dtd.mybatis-3-mapper.dtd 这 ...
- 【转】把VS的智能提示快捷键改成Eclipse的习惯
原文网址:http://programmer.blog.51cto.com/2859493/1095529 平常我一会用eclipse开发,一会又操作VS,他们直接的智能提示快捷键不一样,弄的我老是敲 ...
- Nagios配置文件说明
Lepus 安装配置:http://www.cnblogs.com/xuanzhi201111/p/5200757.html Nagios 各个目录用途说明如下:bin ...
- [html][javascript] 正则匹配示例
var str="akdlfaklhello 1234klfd1441ksalfd9000kals8998j2345fd;lsa"; var reg = new RegExp(/( ...
- secureCRT下linux rz命令上传文件失败或变小(破损)的问题解决方法
在使用secureCRT的linux服务器时候,很多时候需要安装软件,而服务器本身是没有连接外网的 ,这时候就需要用到rz命令了. 在使用rz命令时候,有时候上传文件会失败,是因为上传的文件流中包含某 ...
- Android开发入门——Button绑定监听事件三种方式
import android.app.Activity; import android.os.Bundle;import android.view.View;import android.widget ...