C# 多线程并发


 public partial class MultiThread : Form
    {

        public int threadh;//线程代号 
        public string strUrl;//接收文件的URL 
        public FileStream fs;
        public HttpWebRequest request;
        public byte[] nbytes;//接收缓冲区 
        public int nreadsize;//接收字节数 

        int conts;
        int Conted;
        public MultiThread()
        {
            //不对错误线程进行调用
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
            InitializeComponent();
        }
        //ThreadStart start
        private void butquantity_Click(object sender, EventArgs e)
        {
            if (txtquantity.Text != "")
            {
                conts = Convert.ToInt32(txtquantity.Text);

                Thread[] threads = new Thread[conts];
                for (int i = 0; i < conts; i++)
                {
                    threads[i] = new Thread(new ThreadStart(ReadHttp));
                    threads[i].Name = i.ToString() + "线程号";
                }

                foreach (Thread t in threads)
                {
                    t.Start();
                    //textBox2.Text = Thread.CurrentThread.Name;
                }
                InitializeTimer();
            }
            else
            {
                MessageBox.Show("请求数量不能为空!", "ERROR");
            }
        }

        private void timerClock_Elapsed(object source, ElapsedEventArgs e)
        {
            if (txtquantity.Text != "")
            {
                conts = Convert.ToInt32(txtquantity.Text);

                Thread[] threads = new Thread[conts];
                for (int i = 0; i < conts; i++)
                {
                    threads[i] = new Thread(new ThreadStart(ReadHttp));

                    threads[i].Name = i.ToString() + "线程号";
                }
                foreach (Thread t in threads)
                {
                    t.Start();
                }
            }
            else
            {
                MessageBox.Show("请求数量不能为空!", "ERROR");
            }
        }

        //发送请求
        private void ReadHttp()
        {
            try
            {
                Conted = Convert.ToInt32(txtquantity.Text);
                System.Net.WebClient client = new System.Net.WebClient();
                strUrl = txtAddress.Text;
                //this.textBox2.Text = "正在请求" + strUrl;
                Stream st = client.OpenRead(strUrl);
                StreamReader sr = new StreamReader(st);
                string res = sr.ReadToEnd();
                if (res != null)
                {
                    listBox1.Items.Add("-->" + Thread.CurrentThread.Name + "成功");
                }
                else
                {
                    listBox1.Items.Add("-->" + Thread.CurrentThread.Name + "失败");
                }
                sr.Close();
                st.Close();
                Thread.Sleep(2000);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "提示:");
                //throw;
            }
        }
        public void InitializeTimer()
        {
            System.Timers.Timer timerClock = new System.Timers.Timer();
            timerClock.Elapsed += new ElapsedEventHandler(timerClock_Elapsed);
            //timerClock.Interval = 1000 * 60 * 3;
            timerClock.Interval = 3000;
            timerClock.Enabled = true;

        }

    }
}
时间: 2024-11-09 20:17:14

C# 多线程并发的相关文章

Cocos2d-x优化中多线程并发访问

多线程并发访问在Cocos2d-x引擎中用的不是很多,这主要是因为中整个结构设计没有采用多线程.源自于Objective-C的Ref对象,需要使用AutoreleasePool进行内存管理,AutoreleasePool是非线程安全的,所有不推荐在子多线程中调用Ref对象的retain(). release()和autorelease()等函数.另外,OpenGL上下文对象也是不支持线程安全的.但是有的时候我们需要异步加载一些资源,例如:加载图片纹理.声音的预处理和网络请求数据等.如果是异步加载

简单的多线程并发同步演示

#include "stdafx.h"#include <iostream>#include <Windows.h>using namespace std;HANDLE hMutex;DWORD WINAPI Fun(LPVOID lp){    while(1){        WaitForSingleObject(hMutex,INFINITE);        cout<<"fun"<<endl;//如果不用信

iOS Core data多线程并发访问的问题

大家都知道Core data本身并不是一个并发安全的架构:不过针对多线程访问带来的问题,Apple给出了很多指导:同时很多第三方的开发者也贡献了很多解决方法.不过最近碰到的一个问题很奇怪,觉得有一定的特殊性,与大家分享一下. 这个问题似乎在7.0.1以前的版本上并不存在:不过后来我升级版本到了7.0.4.app的模型很简单,主线程在前台对数据库进行读写,而后台线程不断地做扫描(只读).为此每个线程中各创建了一个NSManagedObjectContext. 这个模型其实有点奇怪,因为普遍的模型是

代码就支持了多线程并发

100行代码就支持了多线程并发,批量写入日志 一,您选择用什么样的日志组件 日志组件,不得不提大名鼎鼎的Log4Net.比较常用的还有 Enterprise Library Logging,ServiceStack Logging.当然您还可以补充,我就只用过这几款. 上边提到的3款日志组件,都要在.config里加代码,特别是Log4Net,还要把SQL写在配置里.我就是仅仅只写个日志,还要配置这么多信息,让人略有不爽. 所以在很长一段时间里,我用下边这个方法写日志:   这个方法足够的简单,

java 多线程并发问题总结

java 多线程并发主要通过关键字synchronized实现 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行.另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块. 二.然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该ob

解决多线程并发问题

1.文件锁 如果对该表的更新或插入的操作,都会经过一个统一的文件,这种方式是可以解决的多进程并发的问题: 实现方式如下: public static function cbInventoryReserve() { $LOCK_FILE_PATH = $_SERVER['DOCUMENT_ROOT']."wmsinventoryapi/inventory/InventoryReserve.php"; $fp = fopen( $LOCK_FILE_PATH, "r"

多线程并发编程

前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧. 正文 线程与进程 1 线程:进程中负责程序执行的执行单元线程本身依靠程序进行运行线程是程序中的顺序控制流,只能使用分配给程序的资源和环境 2 进程:执行中的程序一个进程至少包含一个线程 3 单线程:程序中只存在一个线程,实际上主方法就是一个主线程 4 多线程:在一个程序中运行多个任务目的是更好地使用CPU资源 线程的实现 继承Thread类 在j

多线程并发

转于http://m.blog.csdn.net/blog/haolongabc/7249098 浅谈java内存模型        不同的平台,内存模型是不一样的,但是jvm的内存模型规范是统一的.其实java的多线程并发问题最终都会反映在java的内存模型上,所谓线程安全无非是要控制多个线程对某个资源的有序访问或修改.总结java的内存模型,要解决两个主要的问题:可见性和有序性.我们都知道计算机有高速缓存的存在,处理器并不是每次处理数据都是取内存的.JVM定义了自己的内存模型,屏蔽了底层平台

对JAVA多线程 并发编程的理解

对JAVA多线程并发编程的理解 Java多线程编程关注的焦点主要是对单一资源的并发访问,本文从Java如何实现支持并发访问的角度,浅析对并发编程的理解,也算是对前段时间所学的一个总结. 线程状态转换 Java语言定义了5中线程状态,在任何一个时间点,一个线程只能有且只有其中一种状态,这5中状态分别是: ?  新建(New):创建后尚未启动的线程处于这种状态 ?  运行(Runable):Runable包括了操作系统线程状态中的Running和Ready,也就是处于此状态的线程可能正在执行,也有可

Java多线程并发技术

Java多线程并发技术 参考文献: http://blog.csdn.net/aboy123/article/details/38307539 http://blog.csdn.net/ghsau/article/category/1707779 http://www.iteye.com/topic/366591 JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式