多线程?同时执行六个过程,大家有什么办法?

weiqj8686 2010-06-08 07:26:12
我这边有个过程:
private void voidCF()
{
A();
B();
C();
D();
E();
F();
}

在执行时 是A()执行完后,再执行B()然后再执行C()最后是F(),这样很耗时,怎么才能同时这六个过程呢?这样耗时最长为执行时间最长的那个,而不是相加的关系。这是否传说中的多线程?
谢谢!
...全文
445 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvhai_520 2010-10-11
  • 打赏
  • 举报
回复
全部线程启动后使用wait(),然后使用notifyAll大家一起开动
Java代码
class CarThread{
public void run()
{
//大家一起在这里等。
synchronized(waitObj){
waitObj.wait();
}
//开始比赛
..........
}
}

//大家一起跑
waitObj.notifyAll();
dreamsnake 2010-06-09
  • 打赏
  • 举报
回复
线程的方法说差不多了. 给个貌似有点另类的方法吧, 定义委托后, 用委托的BingInvoke来异步调用
wanggenhu0 2010-06-09
  • 打赏
  • 举报
回复
学习!!!!!!!!!!!!!!!!!!!!!111
softman11 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sp1234 的回复:]
唉,给你写个demo吧。不要只记住一个“线程”的皮毛,至少要知道如何控制结果同步:

C# code
using System;
using System.Threading;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
……
[/Quote]

你这样没任意意义啊。
还不如直接单线程呢!

楼主问的问题也奇怪,同时执行六个过程,不考虑先后顺序,直接开6个线程不就完了。
是太简单,还是我没懂楼主的意思?
deknight 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sp1234 的回复:]
唉,给你写个demo吧。不要只记住一个“线程”的皮毛,至少要知道如何控制结果同步:

C# code
using System;
using System.Threading;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
……
[/Quote]
p哥的代码得顶
加油馒头 2010-06-09
  • 打赏
  • 举报
回复
用多线程可以

网上代码很多很多
csdsuper 2010-06-09
  • 打赏
  • 举报
回复
我觉得用ThreadPool来执行比较好,全交给他管理
  • 打赏
  • 举报
回复
当你只是写一个小程序(而不用系统线程池)的时候,也可以这样简单一点写:
using System;
using System.Threading;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var at = new Thread(A);
at.Start();
var bt = new Thread(B);
bt.Start();
var ct = new Thread(C);
ct.Start();
at.Join();
bt.Join();
ct.Join();
Console.WriteLine(".......................End.");
Console.ReadKey();
}

static void A()
{
Thread.Sleep(2000);
Console.WriteLine("A completed.");
}

static void B()
{
Thread.Sleep(1500);
Console.WriteLine("B completed.");
}

static void C()
{
Thread.Sleep(1900);
Console.WriteLine("C completed.");
}
}
}
  • 打赏
  • 举报
回复
比如说你创建一个 private void voidCF() 过程,启动6个线程的start(),你觉得原来调用voidCF的程序还能正常执行吗?

你原来的程序逻辑是voidCF执行完了的时候6个过程已经都执行结束了,这是最基本的结果同步。如果一个编程者都想不到结果要同步就盲目去调用线程的start()方法了,那么就真的是胡写线程程序了。
zhoubupt 2010-06-09
  • 打赏
  • 举报
回复
学习线程~~
chensun1229 2010-06-09
  • 打赏
  • 举报
回复
学习了!~
  • 打赏
  • 举报
回复
你必须分析系统资源使用情况,分析确实存在需要线程的条件,然后才使用多线程。
兔子-顾问 2010-06-09
  • 打赏
  • 举报
回复
private void voidCF()
{
new Thread((ThreadStart)delegate { A(); }).Start();
new Thread((ThreadStart)delegate { B(); }).Start();
new Thread((ThreadStart)delegate { C(); }).Start();
new Thread((ThreadStart)delegate { D(); }).Start();
new Thread((ThreadStart)delegate { E(); }).Start();
new Thread((ThreadStart)delegate { F(); }).Start();
}
  • 打赏
  • 举报
回复
另外要记住,并不是说多线程就比单线程快,就好象10个人挤一个安全通道肯定谁都出不去,线程调度需要大量的时间。许多时候,多线程比单线程慢。
  • 打赏
  • 举报
回复
唉,给你写个demo吧。不要只记住一个“线程”的皮毛,至少要知道如何控制结果同步:
using System;
using System.Threading;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var Aflag = new ManualResetEvent(false);
var Bflag = new ManualResetEvent(false);
var Cflag = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(h =>
{
A();
Aflag.Set();
});
ThreadPool.QueueUserWorkItem(h =>
{
B();
Bflag.Set();
});
ThreadPool.QueueUserWorkItem(h =>
{
C();
Cflag.Set();
});
Aflag.WaitOne();
Bflag.WaitOne();
Cflag.WaitOne();
Console.WriteLine(".......................End.");
Console.ReadKey();
}

static void A()
{
Thread.Sleep(2000);
Console.WriteLine("A completed.");
}

static void B()
{
Thread.Sleep(1500);
Console.WriteLine("B completed.");
}

static void C()
{
Thread.Sleep(1900);
Console.WriteLine("C completed.");
}
}
}
xuezj508 2010-06-09
  • 打赏
  • 举报
回复
顶,目前正在关注多线程。
weiqj8686 2010-06-08
  • 打赏
  • 举报
回复
能否给出具体的答案?
Justin-Liu 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wuyq11 的回复:]
Thread thread = new Thread(new ParameterizedThreadStart(SomeMethod));
BackgroundWorker worker = new BackgroundWorker();
[/Quote]
多线程
wuyq11 2010-06-08
  • 打赏
  • 举报
回复
Thread thread = new Thread(new ParameterizedThreadStart(SomeMethod));
BackgroundWorker worker = new BackgroundWorker();
huwei12345 2010-06-08
  • 打赏
  • 举报
回复
可以多线程。。

110,535

社区成员

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

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

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