62,046
社区成员
发帖
与我相关
我的任务
分享
mh = new MaualResetEvent(false); // mh 定义为 public ManualResetEvent mh;
mh.WaitOne();
(使用系统线程池)启动一个线程,只需要写ThreadPool.QueueUserWorkItem(h => method());
就可以了,不需要写更多的代码。(其中的 => 只后的内容随便写可执行代码。
绝不要胡乱递归!要改为循环结构。
尽量不要写 Sleep(...) 阻塞代码。如果需要定时,应该使用系统定时器。系统定时器不需要什么线程阻塞,它是系统的硬件中断事件驱动的。public void test()
{
.....
}
这类小程序,他们千奇百怪,顺序执行一遍要120秒。现在你使用50个线程并发执行它们,或许每一个方法都不会比之前的执行时间更短,但是总体的完成时间可能就只需要25秒就行了。
我想 lz 得到了这样一个题目,可能目的还是考察他“创建三个线程”的能力。只不过出这个题目的人以为线程就是用来“阻塞、循环、等待”的,这方面是有问题的。
Thread t1 = new Thread(new ThreadStart(a));
t1.Start();
void a()
{
while(true)
{
if(datatime.now.minutes==1)
{
//你的代码 当然上面的1 你从0到59你爱写成几就写几...反正一个小时只有一个0-59
//至于一天执行一次 你就判断datetime.now.hours==5...
}
}
}
Thread t1 = new Thread(new ThreadStart(a)); t1.Start(); Thread t2 = new Thread(new ThreadStart(b)); t2.Start(); Thread t3 = new Thread(new ThreadStart(c)); t3.Start();
/// <summary> /// 每日定时 /// </summary> private static void a() { var date = DateTime.Now.ToString("yyyy-MM-dd 12:00:00");//每天12点做任务 //执行任务 if (DateTime.Parse(date) < DateTime.Now)//今日已过执行点 { date = DateTime.Parse(date).AddDays(1).ToString();//去明日执行任务点时间 } var ts1 =new TimeSpan(DateTime.Parse(date).Ticks); var ts2 =new TimeSpan(DateTime.Now.Ticks); var ts = ts1.Subtract(ts2).Duration(); Thread.Sleep((int)ts.TotalMilliseconds);//睡眠 } /// <summary> /// 每小时1 /// </summary> private void b() { //执行任务 Thread.Sleep(3600 * 1000);//睡眠 } /// <summary> /// 每小时2 /// </summary> private void c() { //执行任务 Thread.Sleep(3600 * 1000);//睡眠 }
要求是要开三个线程,三个线程分别做不同的任务, 其中两个线程每小时检查一次数据库, 另一个线程是每天固定时间检查一次
Thread t1 = new Thread(new ThreadStart(a));
t1.Start();
Thread t2 = new Thread(new ThreadStart(b));
t2.Start();
Thread t3 = new Thread(new ThreadStart(c));
t3.Start();
/// <summary>
/// 每日定时
/// </summary>
private static void a()
{
var date = DateTime.Now.ToString("yyyy-MM-dd 12:00:00");//每天12点做任务
//执行任务
if (DateTime.Parse(date) < DateTime.Now)//今日已过执行点
{
date = DateTime.Parse(date).AddDays(1).ToString();//去明日执行任务点时间
}
var ts1 =new TimeSpan(DateTime.Parse(date).Ticks);
var ts2 =new TimeSpan(DateTime.Now.Ticks);
var ts = ts1.Subtract(ts2).Duration();
Thread.Sleep((int)ts.TotalMilliseconds);//睡眠
}
/// <summary>
/// 每小时1
/// </summary>
private void b()
{
//执行任务
Thread.Sleep(3600 * 1000);//睡眠
}
/// <summary>
/// 每小时2
/// </summary>
private void c()
{
//执行任务
Thread.Sleep(3600 * 1000);//睡眠
}