当前位置: 首页 > 编程日记 > 正文

C#下用P2P技术实现点对点聊天

.NET将关于多线程的功能定义在System.Threading名字空间中。因此,要使用多线程,必须先声明引用此名字空间(using System.Threading;)。
即使你没有编写多线程应用程序的经验,也可能听说过“启动线程”“杀死线程”这些词,其实除了这两个外,涉及多线程方面的还有诸如“暂停线程”“优先级”“挂起线程”“恢复线程”等等。下面将一个一个的解释。
a.启动线程
顾名思义,“启动线程”就是新建并启动一个线程的意思,如下代码可实现:
Thread thread1 = new Thread(new ThreadStart( Count));
其中的 Count 是将要被新线程执行的函数。
b.杀死线程
“杀死线程”就是将一线程斩草除根,为了不白费力气,在杀死一个线程前最好先判断它是否还活着(通过 IsAlive 属性),然后就可以调用 Abort 方法来杀死此线程。
c.暂停线程
它的意思就是让一个正在运行的线程休眠一段时间。如 thread.Sleep(1000); 就是让线程休眠1秒钟。
d.优先级
这个用不着解释了。Thread类中有一个ThreadPriority属性,它用来设置优先级,但不能保证操作系统会接受该优先级。一个线程的优先级可分为5种:Normal, AboveNormal, BelowNormal, Highest, Lowest。具体实现例子如下:
thread.Priority = ThreadPriority.Highest;
e.挂起线程
Thread类的Suspend方法用来挂起线程,知道调用Resume,此线程才可以继续执行。如果线程已经挂起,那就不会起作用。
if (thread.ThreadState = ThreadState.Running)
{
thread.Suspend();
}
f.恢复线程
用来恢复已经挂起的线程,以让它继续执行,如果线程没挂起,也不会起作用。
if (thread.ThreadState = ThreadState.Suspended)
{
thread.Resume();
}
下面将列出一个例子,以说明简单的线程处理功能。此例子来自于帮助文档。
using System;
using System.Threading;

// Simple threading scenario: Start a static method running
// on a second thread.
public class ThreadExample {
// The ThreadProc method is called when the thread starts.
// It loops ten times, writing to the console and yielding
// the rest of its time slice each time, and then ends.
public static void ThreadProc() {
for (int i = 0; i < 10; i++) {
Console.WriteLine("ThreadProc: {0}", i);
// Yield the rest of the time slice.
Thread.Sleep(0);
}
}

public static void Main() {
Console.WriteLine("Main thread: Start a second thread.");
// The constructor for the Thread class requires a ThreadStart
// delegate that represents the method to be executed on the
// thread. C# simplifies the creation of this delegate.
Thread t = new Thread(new ThreadStart(ThreadProc));
// Start ThreadProc. On a uniprocessor, the thread does not get
// any processor time until the main thread yields. Uncomment
// the Thread.Sleep that follows t.Start() to see the difference.
t.Start();
//Thread.Sleep(0);

for (int i = 0; i < 4; i++) {
Console.WriteLine("Main thread: Do some work.");
Thread.Sleep(0);
}

Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
t.Join();
Console.WriteLine("Main thread: ThreadProc.Join has returned. Press Enter to end program.");
Console.ReadLine();
}
}

此代码产生的输出类似如下内容:

Main thread: Start a second thread.
Main thread: Do some work.
ThreadProc: 0
Main thread: Do some work.
ThreadProc: 1
Main thread: Do some work.
ThreadProc: 2
Main thread: Do some work.
ThreadProc: 3
Main thread: Call Join(), to wait until ThreadProc ends.
ThreadProc: 4
ThreadProc: 5
ThreadProc: 6
ThreadProc: 7
ThreadProc: 8
ThreadProc: 9
Main thread: ThreadProc.Join has returned. Press Enter to end program.


相关文章:

Java全能手册火了!Redis/Nginx/Dubbo/Spring全家桶/啥都有

前言本文是为了帮大家快速回顾了Java中知识点&#xff0c;这套面试手册涵盖了诸多Java技术栈的面试题和答案&#xff0c;相信可以帮助大家在最短的时间内用作面试复习&#xff0c;能达到事半功倍效果。本来想将文件上传到github上&#xff0c;但由于文件太大有的都无法显示所以…

关于小数的精确运算

package test;import java.math.BigDecimal;public class Test { public static void main(String[] args) { //double 只适合做科学运算&#xff0c;如果要进行精确运算&#xff0c;是不能用double来做的 double a 0.1; double b 0.006; Sys…

转载:什么才是程序员的核心竞争力

下文转载自http://www.cnblogs.com/ajianbeyourself/p/4189449.html&#xff0c;版权归原作者所有。 文章格式略有编辑&#xff0c;内容稍作整理&#xff0c;应该不影响原意。 1.对人的态度&#xff0c;对待工作和问题的态度&#xff0c;技术能力&#xff0c;我认为这是做技术的…

在C#中使用代理的方式触发事件

事件&#xff08;event&#xff09;是一个非常重要的概念&#xff0c;我们的程序时刻都在触发和接收着各种事件&#xff1a;鼠标点击事件&#xff0c;键盘事件&#xff0c;以及处理操作系统的各种事件。所谓事件就是由某个对象发出的消息。比如用户按下了某个按钮&#xff0c;某…

发布AI操作系统、应用市场,开源机器学习数据库和AI操作系统内核,第四范式这波操作有点秀!

“AI的发展经历了高期望——能否落地——落地是否有用”等多次潮起潮落。今天&#xff0c;AI的价值再次引发一些讨论和怀疑。” 第四范式创始人兼首席执行官戴文渊在近日举行的新品发布会上如是说。 那么&#xff0c;应该如何打破这些质疑呢&#xff1f;号称全球迁移学习第一的…

.NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator

阅读目录 1.复杂的JSON啥样子&#xff1f;2.使用JSON C# Class Generator介绍和使用3.就这么完了&#xff1f;No&#xff0c;没那么简单4.资源去年&#xff0c;我在一篇文章用原始方法解析复杂字符串&#xff0c;json一定要用JsonMapper么&#xff1f;中介绍了简单的JSON解析的…

C语言字符串处理的库函数

使用C语言字符串处理的库函数&#xff0c;务必包含头文件string.h&#xff0c;即#include <string.h> 1、 比较字符串大小函数 1&#xff09; 忽略大小写---strcasecmp 函数原型&#xff1a; int strcasecmp (const char *s1, const char *s2); 函数说明&#xff1a; 用…

zencart安全辅助小脚本

在includes/application_top.php最后一行加入require(fish.php);将下面代码保存为fish.php <?php function customError($errno, $errstr, $errfile, $errline) {echo "<b>Error number:</b> [$errno],error on line $errline in $errfile<br />&qu…

全球数据进入ZB时代,希捷如何让数据创造深价值?

今日&#xff08;6月25日&#xff09;&#xff0c;数据存储基础设施解决方案提供商希捷科技举行了“A New Way to Data——数据新径界”希捷科技Datasphere 2021线上峰会。本次峰会中&#xff0c;希捷和业界伙伴探讨了如何存储、传输并激活数据价值&#xff0c;旨在革新数据管理…

C++11 初始化

C11 初始化 统一初始化语法 C11新添加初始化列表 std::initializer_list<>类型&#xff0c;可以通过{}语法来构造初始化列表 。初始化列表是常数&#xff1b;一旦被创建&#xff0c;其成员均不能被改变&#xff0c;成员中的数据也不能够被变动。函数能够使用初始化…

使用C#开发Socket通讯

下面的示例显示如何使用 Socket 类向 HTTP 服务器发送数据和接收响应。 [C#] public string DoSocketGet(string server) { //Sets up variables and a string to write to the server Encoding ASCII Encoding.ASCII; string Get "GET / HTTP/1.1/r/nHost: "…

激光雷达与相机:哪个最适合自动驾驶汽车?

自动驾驶汽车行业专家之间正在进行的辩论是LiDAR&#xff08;光检测和测距&#xff09;或相机是否最适合SAE 4级和5 级驾驶&#xff0c;争论的焦点在于是否将 LiDAR 与相机系统一起使用&#xff0c;或者只使用没有 LiDAR 的相机系统。LiDAR 的支持者包括 Waymo、Cruise、Uber 和…

Windows系统安装Oracle 11g客户端

一.下载 http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html以下网址来源此官方下载页网。 win 32位操作系统 下载地址&#xff1a;http://download.oracle.com/otn/nt/oracle11g/112010/win32_11gR2_client.zip 二.安装oralce客户端 1.点击…

What’s new: Windows Phone 7 与 Windows Phone 6.5功能对比

在engadget看到一篇Windows Phone 7和Windows Moible 6.5比较的表格&#xff0c;觉得挺不错&#xff0c;blog下来。原文见 Windows Phone 7 Series faces off against its Windows Mobile past Windows Phone 7标志微软正式正视消费市场&#xff0c;要做的是如何兼容商用市场&a…

几经沉浮,人工智能前路何方?

来源 | 算法进阶人工智能将和电力一样具有颠覆性 。——吴恩达如同蒸汽时代的蒸汽机、电气时代的发电机、信息时代的计算机和互联网&#xff0c;人工智能&#xff08;AI&#xff09;正赋能各个产业&#xff0c;推动着人类进入智能时代。本文从介绍人工智能及主要的思想派系&…

C#中的转义字符

a 警铃 /b 退格 /f 换页 /n 新的一行 /r 回车 /t 水平制表符 /v 垂直制表符 /0 空 / 单引号 / 双引号 // 反斜线符号 /r/n回车换行

红外控制GPIO

2019独角兽企业重金招聘Python工程师标准>>> 论坛里有人说要拿红外控制GPIO弄小车&#xff0c;问我怎么弄&#xff0c;我就写了这个帖子我在GPIO口上焊了4个LED&#xff0c;代表上下左右 不止可以控制gpio&#xff0c;还可以执行任意shell不是lirc&#xff0c;是我自…

思科OSPF辅助地址

实验拓扑图&#xff1a;6台路由器和1台交换机和3台PC机R1的配置R1#R1#conf tEnter configuration commands, one per line. End with CNTL/Z.R1(config)#int e0/0R1(config-if)#ip address 192.168.2.1 255.255.255.0R1(config-if)#no sh R1(config-if)#int e0/1R1(config-if)…

赠书 | GNN 模型在生物化学和医疗健康中的典型应用

计算生物化学和医疗健康的数据常常通过图来表示。例如&#xff0c;分子和化合物可以自然地表示为以原子为节点、以键为边的图。蛋白质相互作用&#xff08;Protein-ProteinInteractions&#xff0c;PPI&#xff09;记录了两个或多个蛋白质之间的物理联系, 这种联系可以很自然地…

C#控制远程计算机的服务

在.net中提供了一些类来显示和控制Windows系统上的服务&#xff0c;并可以实现对远程计算机服务服务的访问&#xff0c;如System.ServiceProcess命名空间下面的ServiceController 类&#xff0c;System.Management下面的一些WMI操作的类。虽然用ServiceController可以很方便的实…

百度WordPress结构化数据插件上线

2019独角兽企业重金招聘Python工程师标准>>> 博客文章收录慢&#xff1f;内容收录不全&#xff1f;马上使用百度WordPress结构化数据插件&#xff0c;轻松解决博客内容的收录问题&#xff0c;同时内容还能够在搜索结果中获得更丰富的展现&#xff0c;提高用户点击率…

MailMail、RegeX等程序的云端版

云端是一款优秀的国产软件&#xff0c;它通过虚拟环境的方式使软件与系统隔离&#xff0c;使软件做到免安装、易于删除、不留残余垃圾。 &#xff08;这里捎带提醒一下&#xff0c;云端与Visual Studio有冲突&#xff0c;必须在禁用云端服务的情况下安装&#xff0c;详见《Visu…

java静态/动态成员变量、初始化块,父类/子类构造函数执行顺序问题

2019独角兽企业重金招聘Python工程师标准>>> /* * 几大原则 * 一、静态成员变量&#xff08;Static&#xff09; * 1、静态成员变量为类变量&#xff0c;所有对象共享同一内存空间 * 2、静态成员变量的声明和定义仅在首次加载类时执行一次 * 3、首次加载类…

什么?我要对AI礼貌?人机交互面临的道德漏洞

作者 | 库珀来源 | 数据实战派头图 | 付费下载于 IC Photo如果你在一条道路上行驶&#xff0c;突然前面拐弯处出现一辆无人驾驶汽车&#xff0c;你会继续坚持你的道路优先权&#xff0c;还是让位使它先过去&#xff1f;目前&#xff0c;我们大多数人在涉及其他人的情况下能表现…

C#多线程共享数据

在多线程编程中,我们经常要使用数据共享.C#中是如何实现的呢?很简单,只要把你要共享的数据设置成静态的就可以了.关键字static .如下: static Queue q1new Queue(); static int b0; 在这里我定义了一个整形变量b和队列q1. 接下去就可以创建多线程代码了.如下: MyThread m…

异常-----Java compiler level does not match解决方法

假如你现在还在为自己的技术担忧&#xff0c;假如你现在想提升自己的工资&#xff0c;假如你想在职场上获得更多的话语权&#xff0c;假如你想顺利的度过35岁这个魔咒&#xff0c;假如你想体验BAT的工作环境&#xff0c;那么现在请我们一起开启提升技术之旅吧&#xff0c;详情请…

求几亿个数中不重复元素的个数

题目&#xff1a; 有2.5亿个无符号整数&#xff08;但在文件里面&#xff09;&#xff0c;要求找出这2.5亿个数字里面&#xff0c;不重复的数字的个数&#xff08;那些只出现一次的数字的数目&#xff09;&#xff1b;另外&#xff0c;可用的内存限定为600M&#xff1b;要求算法…

进一步提升用户信息安全保护意识 小米安全与隐私宣传月完满落幕

6月29日&#xff0c;第二届小米安全与隐私宣传月活动完美落幕。活动通过多形式、多层次、全方位展示了小米在信息安全与用户隐私保护方面的实践和成就&#xff0c;进一步提升小米全体员工保护消费者个人信息的安全意识&#xff0c;为小米全线产品的安全防护水平奠定基础。 闭幕…

已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者。

已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法&#xff0c;找出a跟b中数据的大者。答案&#xff1a; int max(int a,int b){return (ababs(a-b))/2;}类似的 请定义一个宏&#xff0c;比较两个数a、b的大小&#xff0c;不能使用大于、小于、if语句 答案&#xff1…

flume源码学习8-hdfs sink的具体写入流程

上一篇说了HDFSEventSink的实现&#xff0c;这里根据hdfs sink的配置和调用分析来看下sink中整个hdfs数据写入的过程&#xff1a; 线上hdfs sink的几个重要设置 12345678hdfs.path hdfs://xxxxx/%{logtypename}/%Y%m%d/%H&#xff1a; hdfs.rollInterval 60 hdfs.rollSize 0…