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"] == "1")
            {
                Console.WriteLine(1);
            }
            else if (dic["MessageType"] == "2")
            {
                Console.WriteLine(2);

            }
            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, 11000);
            // 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(100);
                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[1024];

            while (true)
            {
                handler.BeginReceive(buff, 0, 1024, 0, 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[1024];

        }
    }
}
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(1, new StateObject() { key="1",state=false });
        dicDone.Add(2, new StateObject() { key = "2", state = false });
        dicDone.Add(3, new StateObject() { key = "3", state = false });

        AddEvent add = (a, b) =>
        {
            int r= a + b;
            bags.Add(r);

            return r;
        };

        add.BeginInvoke(1, 2, callback, dicDone[1]);

        add = (a, b) =>
        {
            int r = a + b;
            bags.Add(r);

            return r;
        };

        add.BeginInvoke(3, 4, callback, dicDone[2]);

        add = (a, b) =>
        {
            Thread.Sleep(10000);
            int r = a + b;
            bags.Add(r);

            return r;
        };

        add.BeginInvoke(5, 6, callback, dicDone[3]);
        Thread th = new Thread((o) =>
        {

            while (true)
            {
                int cx = dicDone.Keys.Count;
                int x = 0;
                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);
    }
}
时间: 2024-10-18 19:29:33

C#多线程数据分布加载的相关文章

C# 多线程 异步加载 窗体

C# 多线程 异步加载 窗体 分类: C#2014-05-28 16:57 1286人阅读 评论(0) 收藏 举报 异步加载 我们在使用 windowform 编程的时候,我们或许可能会越到,各种在窗体加载的时候,会进行其他的操作: 1.若是在加载之前,操作--->整个界面出来的很慢,而且若是时间长的话,页面很久才能出来, 2.若是写在加载之后处理的话,虽然界面出来了,这个时候,出现了假死的状体.但是不能乱点,一点,就有卡死的现象. 现在我们利用异步,和多线程来控制,并且加上进度条.来做一个界面

多线程异步加载图片

多图片多线程异步下载 开发中非常常用的就是就是图片下载,我们常用的就是SDWebImage,但是作为开发人员,不仅要能会用,还要知道其原理.本文就会介绍多图下载的实现. 本文中的示例Demno地址,下载后项目位于iOS_Demo/09-多图片多线程下载 1 - 问题 开篇我就先将多图下载过程中出现的问题摆出来,让我们能够一一克服 . 1:下载过程要放到子线程中,否则会导致UI线程卡顿 2:图片会重复下载,我们不仅要把下载完的图片放到内存中,还要把下载队列也缓存起来,否则可能图片没有下载完,会多次

Android异步加载全解析之使用多线程

异步加载之使用多线程 初次尝试 异步.异步,其实说白了就是多任务处理,也就是多线程执行,多线程那就会有各种问题,我们一步步来看,首先,我们创建一个class--ImageLoaderWithoutCaches,从命名上,大家也看出来,这个类,我们实现的是不带缓存的图像加载,不多说,我们再创建一个方法--showImageByThread,通过多线程来加载图像: /** * Using Thread * @param imageView * @param url */ public void sh

Cocos2d-x 3.0多线程异步资源加载

Cocos2d-x从2.x版本到上周刚刚才发布的Cocos2d-x 3.0 Final版,其引擎驱动核心依旧是一个单线程的"死循环",一旦某一帧遇到了"大活儿",比如Size很大的纹理资源加载或网络IO或大量计算,画面将 不可避免出现卡顿以及响应迟缓的现象.从古老的Win32 GUI编程那时起,Guru们就告诉我们:别阻塞主线程(UI线程),让Worker线程去做那些"大活儿"吧. 手机游戏,即便是休闲类的小游戏,往往也涉及大量纹理资源.音视频资

Android ListView避免多线程加载一个同一资源

当我们的ListView中的Item包含图片,而且这些图片是同一资源,我们用多线程去加载图片,这时候可能就发生了这种情况. 比如线程是人,第一个人去做加载图片到缓存的工作,还没做好时第二个人要这同一张张图,结果缓存还没有这张图,于是第二个人也去加载图片到缓存..以此类推,同时可能有N个人在加载同一张图,N取决于图片没加载到缓存前,可见的Item数量. 于是针对这种情况进行细化同步,避免发生. //首先需要一个ConcurrentHashMap<String, Boolean>,String表示

Android 网络图片加载缓存处理库ImageLoader和Picasso

在Android图片处理中需要考虑的问题很多,例如OOM.图片缓存和网络图片加载.多线程问题及图片压缩处理等等复杂的问题.网上也有一些很优秀的开源库帮我们处理这些问题,下面介绍两款开源图片处理库框架:Universal-ImageLoader和Picasso. Universal-ImageLoader: 优点: 支持本地图片和网络图片的多线程异步加载和缓存处理: 个性化的配置自己项目的ImageLoader: 图片加载过程的监听回调: 自动对加载的图片针对当前剩余内存进行裁剪优化,防止OOM:

演化理解 Android 异步加载图片

图片加载的几种方法如下: 下面测试使用的layout文件: 简单来说就是 LinearLayout 布局,其下放了5个ImageView. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical

使用UIL(Universal-Image-Loader)异步加载图片

概要: Android-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是实现可重复使用的异步图像加载.缓存和显示.所以,如果你的程序里需要这个功能的话,使用它,因为已经封装好了一些类和方法.其实,写一个这方面的程序还是比较麻烦的,要考虑多线程,缓存,内存溢出等很多方面. 功能介绍: A:多线程图片加载:          B:灵活更改ImageLoader的基本配置,包括最大线程数.缓存方式.图片显示选项等:          C:图片异步加载缓存机制,包括内

Android图片异步加载之Android-Universal-Image-Loader

将近一个月没有更新博客了,由于这段时间以来准备毕业论文等各种事务缠身,一直没有时间和精力沉下来继续学习和整理一些东西.最近刚刚恢复到正轨,正好这两天看了下Android上关于图片异步加载的开源项目,就顺便整理记录下来,作为这一个多月来博客的重新开火做饭吧.从今天起我会陆续恢复博客的更新,也希望大家继续支持. 今天要介绍的是Github上一个使用非常广泛的图片异步加载库Android-Universal-Image-Loader,该项目的功能十分强大,可以说是我见过的目前功能最全.性能最优的图片异