Thread.SpinWait/Sleep都是静态方法,为何可以分别控制不同的线程?

josxhn 2014-06-05 05:20:57
如题如题如题如题如题如题如题如题如题如题如题
...全文
303 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
josxhn 2014-06-07
  • 打赏
  • 举报
回复
josxhn 2014-06-06
  • 打赏
  • 举报
回复
顶一下,,,,,,,谁能帮我解释解释
josxhn 2014-06-05
  • 打赏
  • 举报
回复
引用 4 楼 wmg494005678 的回复:
为什么不能呢。。线程又不是同时执行的,单核情况下,一个时间点只有一个线程在运行
可是就像2L说的,我也在有的文章里面看到说Sleep和SpinWait是用来控制主线程, 他们说的又是怎么一回事?
wmg494005678 2014-06-05
  • 打赏
  • 举报
回复
为什么不能呢。。线程又不是同时执行的,单核情况下,一个时间点只有一个线程在运行
josxhn 2014-06-05
  • 打赏
  • 举报
回复
引用 1 楼 tinydyw 的回复:
...静态方法控制的是主线程.....实例方法才能控制不同的线程
或者改成这样,更加明显

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace Thread_Methods
{
	class Consts
	{
		public static int UnitTime = 100000000;
	}

	class Program
	{
		static void Main(string[] args)
		{
			ThreadClass tc1 = new ThreadClass("OOO",1);
			ThreadClass tc2 = new ThreadClass("XXX",2);
			Thread t1 = new Thread(new ThreadStart(tc1.Work));
			Thread t2 = new Thread(new ThreadStart(tc2.Work));
			t1.Start();
			t2.Start();
			Thread.SpinWait(Consts.UnitTime * 10);
			t1.Abort();
			t2.Abort();
			Console.WriteLine("--- End ---");
			Console.Read();
		}
	}

	class ThreadClass
	{
		public bool IsWorking = true;

		private string Name = "ThreadClass";
		private int Interval = 1;
		private DateTime StartTime;

		public ThreadClass(string name, int interval)
		{
			StartTime = DateTime.Now;
			Name = name;
			Interval = interval;
		}

		public void Work()
		{
			while (IsWorking)
			{
				Console.WriteLine(Name + "\t" + (DateTime.Now - StartTime).ToString());
				Thread.SpinWait(Consts.UnitTime * Interval);
			}
		}
	}
}

打印结果如下: OOO 00:00:00.0250014 XXX 00:00:00.0280016 OOO 00:00:00.6100349 OOO 00:00:01.1940683 XXX 00:00:01.2020687 OOO 00:00:01.7651010 OOO 00:00:02.3481343 XXX 00:00:02.3601349 OOO 00:00:02.9371680 OOO 00:00:03.5282018 XXX 00:00:03.5342021 OOO 00:00:04.0952342 OOO 00:00:04.6602665 XXX 00:00:04.6792676 OOO 00:00:05.2252989 OOO 00:00:05.8113324 XXX 00:00:05.8403340 --- End ---
josxhn 2014-06-05
  • 打赏
  • 举报
回复
可是我下面这段代码就既可以控制Main()也可以控制Work()

class Consts
	{
		public static int UnitTime = 100000000;
	}

	class Program
	{
		static void Main(string[] args)
		{
			ThreadClass tc1 = new ThreadClass();
			Thread t1 = new Thread(new ThreadStart(tc1.Work));
			t1.Start();
			Thread.SpinWait(Consts.UnitTime * 10);
			t1.Abort();
		}
	}

	class ThreadClass
	{
		public bool IsWorking = true;
		private DateTime StartTime;

		public ThreadClass()
		{
			StartTime = DateTime.Now;
		}

		public void Work()
		{
			while (IsWorking)
			{
				Console.WriteLine((DateTime.Now - StartTime).ToString());
				Thread.SpinWait(Consts.UnitTime);
			}
		}
	}
tinydyw 2014-06-05
  • 打赏
  • 举报
回复
...静态方法控制的是主线程.....实例方法才能控制不同的线程

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧