queueuserworkitem如何创建线程

queueuserworkitem  时间:2021-01-17  阅读:()

C# 多线程的使用。如何使用多线程?

你用线程池(ThreadPool)可以实现,也可以用线程(Thread)实现 for (int i = 0; i < int.Parse(times); i++) //number of threads { //Console.WriteLine("thread i = " + i); //Thread oThread = new Thread(new ParameterizedThreadStart(Beta)); bool FIL = fi == "1" ? true :false; para p = new para { Finished = (i == int.Parse(times) - 1), Xml = doc.InnerXml, URL = url, num_msgs_processed = i, num_msgs_sent = i, FI = FIL }; // Start the thread //oThread.Start(p); //oThread.Join(); ThreadPool.QueueUserWorkItem(Beta, p); }

c# Socket 多线程例子

使用ThreadStart委托来衍生三个新线程

using System; using System.Threading; namespace ThreadStartSampleCS { class Program { static void Main() { Thread newThread; ThreadStart threadMethod = new ThreadStart(DoWork); for (int counter = 1; counter < 4; counter++) { Console.WriteLine("Starting Thread {0}", counter); newThread = new Thread(threadMethod); newThread.Name = counter.ToString(); newThread.Start(); } } static void DoWork() { for (int counter = 1; counter < 11; counter++) { Console.WriteLine("Thread {0}: iteration {1}", Thread.CurrentThread.Name, counter); Thread.Sleep(1); } } } } 使用ParameterizedThreadStart委托来衍生三个新线程 using System; using System.Threading; namespace ParameterizedThreadStartSampleCS { class Program { static void Main() { Thread newThread; ParameterizedThreadStart threadMethod = new ParameterizedThreadStart(DoWork); for (int counter = 1; counter < 4; counter++) { Console.WriteLine("Starting Thread {0}", counter); newThread = new Thread(threadMethod); newThread.Name = counter.ToString(); newThread.Start(5); } } static void DoWork(object iterations) { for (int counter = 1; counter < (int)iterations + 1; counter++) { Console.WriteLine("Thread {0}: iteration {1}", Thread.CurrentThread.Name, counter); Thread.Sleep(1); } } } } 使用ThreadPool类从线程池中启动线程 using System; using System.Threading; namespace ThreadPoolSampleCS { class Program { static void Main(string[] args) { ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc)); Console.WriteLine("Main thread starts"); Thread.Sleep(10000); Console.WriteLine("Main thread exits."); } static void ThreadProc(Object stateInfo) { Console.WriteLine("Hello from the thread pool. I will count from 1 to 100"); for (int counter = 1; counter < 101; counter++) { Console.WriteLine(counter); Thread.Sleep(500); } } } } 实现IAsyncResult接口和AsyncCallback委托 using System; using System.Threading; namespace AsynCallbackSampleCS { class Program { delegate int IntAsyncDelegate(int number); static IntAsyncDelegate aDelegate; static int i(int number) { if (number < 1) return 0; else if (number == 1 || number == 2) return number; else return i(number - 2) + i(number - 1); } static void DisplayResult(IAsyncResult ar) { int result = aDelegate.EndInvoke(ar); Console.WriteLine("Elemet number {0} in the i series is {1}", ar.AsyncState.ToString(), result); } static void Main(string[] args) { aDelegate = new IntAsyncDelegate(i); AsyncCallback callback = new AsyncCallback(DisplayResult); Console.Write("Enter a number: "); int number = int.Parse(Console.ReadLine()); aDelegate.BeginInvoke(number, callback, number); Console.WriteLine("wait while we process your request"); Thread.Sleep(5000); } } } 通过异步调用迁移线程的执行上下文 using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Security.Principal; using System.Threading; namespace ExecutionHostSampleCS { class Program { [DllImport("advapi32.dll")] private static extern bool LogonUser( String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken); static void Main() { System.IntPtr pToken; //请将LogonUser方法中的用户名、域名、密码替换成可以登陆本机的值。

if (LogonUser("用户名", "域名", "密码", 2, 0, out pToken)) { WindowsIdentity.Impersonate(pToken); DisplayContext("Main"); ThreadPool.QueueUserWorkItem(Callback, null); ExecutionContext ec = ExecutionContext.Capture(); ExecutionContext.SuppressFlow(); ThreadPool.QueueUserWorkItem(Callback, null); ContextCallback cb = new ContextCallback(Callback); ExecutionContext.Run(ec, cb, 0); ThreadPool.QueueUserWorkItem(Callback, null); ExecutionContext.RestoreFlow(); ThreadPool.QueueUserWorkItem(Callback, null); pToken = IntPtr.Zero; } Console.ReadLine(); } static void Callback(object o) { DisplayContext("Callback"); } static void DisplayContext(string s) { System.Console.WriteLine(s + " Thread#{0} Current user is {1}", Thread.CurrentThread.ManagedThreadId, WindowsIdentity.GetCurrent().Name); } } } 实现SynchronizationContext类和SendOrPostCallback委托 using System; using System.Threading; namespace SynchronizationContextSampleCS { class ount { public decimal balance; public void Deposit(decimal amount) { balance += amount; } public void Withdraw(decimal amount) { balance -= amount; } } class Program { static ount ount; static void Main(string[] args) { ount = new ount(); SendOrPostCallback deposit = new SendOrPostCallback(Deposit); SendOrPostCallback withdraw = new SendOrPostCallback(Withdraw); SynchronizationContext ctx = new SynchronizationContext(); ctx.Post(deposit, 500); ctx.Post(withdraw, 500); Console.ReadLine(); } static void Withdraw(object state) { Console.WriteLine("Withdraw: current balance = {0:C}", ount.balance); ount.Withdraw(decimal.Parse(state.ToString())); Console.WriteLine("Withdraw: new balance = {0:C}", ount.balance); } static void Deposit(object state) { Console.WriteLine("Withdraw: current balance = {0:C}", ount.balance); ount.Deposit(decimal.Parse(state.ToString())); Console.WriteLine("Deposit: new balance = {0:C}", ount.balance); } } }

queueuserworkitem是异步的还是同步的

串行通信是指 使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。

其只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。

在计算机和终端之间的数据传输通常是靠电缆或信道上的电流或电压变化实现的。

如果一组数据的各数据位在多条线上同时被传输,这种传输方式称为并行通信。

同步通信与异步通信区别: 1.同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。

2.同步通信效率高;异步通信效率较低。

3.同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。

4.同步通信可用于点对多点;异步通信只适用于点对点。

如何创建线程

方式1:继承Thread类 步骤: 1):定义一个类A继承于Java.lang.Thread类. 2):在A类中覆盖Thread类中的run方法. 3):我们在run方法中编写需要执行的操作:run方法里的代码,线程执行体. 4):在main方法(线程)中,创建线程对象,并启动线程. (1)创建线程类

inlicloud48元/月,云主机,2核1G/200Mbps,可选安徽/上海联通/广州移动/江门移动NAT

inlicloud怎么样?inlicloud(引力主机)主要产品为国内NAT系列VPS,目前主要有:上海联通NAT(200Mbps带宽)、宿州联通NAT(200Mbps带宽)、广州移动NAT(200Mbps带宽)。根据官方的说法国内的NAT系列VPS不要求备案、不要求实名、对中转要求也不严格,但是,禁止任何形式的回国!安徽nat/上海联通/广州移动/江门移动nat云主机,2核1G/200Mbps仅...

Cloudxtiny:£1.5/月,KVM-512MB/100GB/英国机房

Cloudxtiny是一家来自英国的主机商,提供VPS和独立服务器租用,在英国肯特自营数据中心,自己的硬件和网络(AS207059)。商家VPS主机基于KVM架构,开设在英国肯特机房,为了庆祝2021年欧洲杯决赛英格兰对意大利,商家为全场VPS主机提供50%的折扣直到7月31日,优惠后最低套餐每月1.5英镑起。我们对这场比赛有点偏见,但希望这是一场史诗般的决赛!下面列出几款主机套餐配置信息。CPU...

3C云1核1G 9.9元 4核4G 16元 美国Cera 2核4G 24元

3C云互联怎么样?3C云互联专注免备案香港美国日本韩国台湾云主机vps服务器,美国高防CN2GIA,香港CN2GIA,顶级线路优化,高端品质售后无忧!致力于对互联网云计算科技深入研发与运营的极客共同搭建而成,将云计算与网络核心技术转化为最稳定,安全,高速以及极具性价比的云服务器等产品提供给用户!专注为个人开发者用户,中小型,大型企业用户提供一站式核心网络云端服务部署,促使用户云端部署化简为零,轻松...

queueuserworkitem为你推荐
手机游戏排行榜20152017手游排行榜前十名拂晓雅阁现在最流行的系统是那个???淘宝店推广如何推广淘宝店童之磊华硕的四核平板电脑,怎么样?硬盘人电脑对人有多大辐射?vbscript教程请教一下高手们,这个VBS脚本难不难啊,我想学学这个,但是又不知道该从哪入手,希望高手指点指点??开机滚动条怎么减少开机滚动条?xp系统停止服务XP系统停止服务后怎么办?安装迅雷看看播放器迅雷看看播放器下了安装不了如何清理ie缓存怎么清除IE缓存.
查询域名 西安服务器租用 免费cn域名 idc评测 vultr美国与日本 winhost diahosting 国外php主机 站群服务器 权嘉云 有益网络 福建铁通 天翼云盘 vip域名 购买国外空间 域名和主机 免备案cdn加速 sonya web服务器有哪些 卡巴斯基免费版下载 更多