线程 或者 异步的一个问题,求解决!

l171147904 2010-03-08 11:28:36
有这么一组数据:
延迟时间 数据值
100 1
200 1
500 0
1000 1

现在:遍历此数据,
延迟100毫秒,取值--操作!
延迟200毫秒,取值--操作!...

此过程要求 同时执行!
意思:1000毫秒后,程序执行完毕

C#,怎解?
...全文
203 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
PerDign 2010-03-08
  • 打赏
  • 举报
回复
虽然看不懂 但看出来楼主专心专研 值得感叹 支持下
烈火蜓蜻 2010-03-08
  • 打赏
  • 举报
回复
这个不明白。


int[][] a = new int[][2];
int[] b = new int[2];

function a
{
while(true)
{
lock(a)
{
随机取一个赋给b
从a中删除b
}
延时 b[0] 秒
执行操作
}
}

开N个执行a方法的线程
l171147904 2010-03-08
  • 打赏
  • 举报
回复
引用 1 楼 yuwenge 的回复:
Thread.Sleep


在线等!谢谢

Thread.Sleep 写在 遍历里面,
执行完毕时间 将是:1800
l171147904 2010-03-08
  • 打赏
  • 举报
回复

占楼
卧_槽 2010-03-08
  • 打赏
  • 举报
回复
Thread.Sleep
l171147904 2010-03-08
  • 打赏
  • 举报
回复
引用 17 楼 qldsrx 的回复:
没看懂意思,特别是那个“1000毫秒后,程序执行完毕”更加不解。


呵呵!

0.1秒 执行一次
0.2,0.5,1秒各执行一次!
然后函数结束! 不就1000毫秒后,程序执行完毕

由于在遍历里面!无启用线程异步的话,正常应该 1.8秒才结束程序!
0.1秒执行一次,再等待0.2执行一次
(正确结果:0.1秒执行一次,再等待0.1行一次)
l171147904 2010-03-08
  • 打赏
  • 举报
回复
测试下,还是 线程池效率好很多!

开启多线程耗资源!
谢谢 结贴!
qldsrx 2010-03-08
  • 打赏
  • 举报
回复
没看懂意思,特别是那个“1000毫秒后,程序执行完毕”更加不解。
l171147904 2010-03-08
  • 打赏
  • 举报
回复
引用 15 楼 qqiuzaihui 的回复:
C# code MyData de=new MyData();privatevoid Form1_Load(object sender, EventArgs e)
{int[,] data=newint[,] { {100,1 }, {200,1 }, {500,0 }, {1000,1 } };for (int i=0; i<4; i++)
?-


谢了!
qqiuzaihui 2010-03-08
  • 打赏
  • 举报
回复
        MyData de = new MyData();
private void Form1_Load(object sender, EventArgs e)
{
int[,] data = new int[,] { { 100, 1 }, { 200, 1 }, { 500, 0 }, { 1000, 1 } };

for (int i = 0; i < 4; i++)
{
MyData de = new MyData();
de.waittime = data[i, 0];
de.value = data[i, 1];
ThreadPool.QueueUserWorkItem(new WaitCallback(JanitorMethod), de);
}
}

private void JanitorMethod(object ob)
{
this.de = (MyData)ob;
Thread.Sleep(de.waittime);
Console.WriteLine("等待" + de.waittime + "后, 取值:" + de.value);
}

struct MyData
{
public int waittime;
public int value;
}
beibeisay88 2010-03-08
  • 打赏
  • 举报
回复
引用 4 楼 linux7985 的回复:
这个不明白。


int[][] a = new int[][2];
int[] b = new int[2];

function a
{
    while(true)
    {
        lock(a)
        {
            随机取一个赋给b
            从a中删除b
        }
        延时 b[0] 秒
        执行操作
    }
}

开N个执行a方法的线程



不是很理解~~~~~~~~
l171147904 2010-03-08
  • 打赏
  • 举报
回复
期待 哪位 提供一个线程池 使用实例!
l171147904 2010-03-08
  • 打赏
  • 举报
回复
引用 11 楼 guoyichao 的回复:
题目本身有问题,遍历本身就包含了先后的意思,怎么可能同时执行?


是如此,没错!那是我们的理解!
但是在程序里面,简单几次或几十次遍历,时间间隔 微小到 0.000...1 秒!
程序控制可都是 0.?秒到几十秒。。。

如前所说 本程序时1000毫秒执行结束。。。
guoyichao 2010-03-08
  • 打赏
  • 举报
回复
题目本身有问题,遍历本身就包含了先后的意思,怎么可能同时执行?
an_ding 2010-03-08
  • 打赏
  • 举报
回复
线程池!回复内容太短了!
l171147904 2010-03-08
  • 打赏
  • 举报
回复
引用 8 楼 linux7985 的回复:
引用楼主 l171147904 的回复:有这么一组数据:延迟时间  数据值 100        1 200        1 500        0 1000        1 现在:遍历此数据,延迟100毫秒,取值--操作!延迟200毫秒,取值--操作!... 此过程要求 同时执行!意思:1000毫秒后,程序执行完毕 C#,怎解?
定义数据 a[][];
for循环一下,
    判断一下,是否最后一个,不是
        取一个值,new一个timer延时a[N][0]毫秒, 然后取a[N][1],操作
    不是
        取一个值,new一个timer延时a[N][0]毫秒减去程序已执行的毫秒, 然后取a[N][1],操作
结束


是一个思路。。。。谢谢!

我现在用多线程处理!还考虑 使用 线程池(具体不熟悉,望7楼给个实例)

我当前:
int coun = ds_SCENE.Tables[0].Rows.Count;
Thread[] fThreadArray = new Thread[coun];
for (int i = 0; i < coun; i++)
fThreadArray[i] = new Thread(new ThreadStart(DoSomeThings()));
for (int i = 0; i < coun; i++)
fThreadArray[i].Start();

public void DoSomeThings()
{
//还没测试。。。
}
烈火蜓蜻 2010-03-08
  • 打赏
  • 举报
回复
引用楼主 l171147904 的回复:
有这么一组数据:
延迟时间  数据值
100        1
200        1
500        0
1000        1

现在:遍历此数据,
延迟100毫秒,取值--操作!
延迟200毫秒,取值--操作!...

此过程要求 同时执行!
意思:1000毫秒后,程序执行完毕

C#,怎解?

定义数据 a[][];
for循环一下,
判断一下,是否最后一个,不是
取一个值,new一个timer延时a[N][0]毫秒, 然后取a[N][1],操作
不是
取一个值,new一个timer延时a[N][0]毫秒减去程序已执行的毫秒, 然后取a[N][1],操作
结束
qqiuzaihui 2010-03-08
  • 打赏
  • 举报
回复
线程池可行么?

有多少组数据, 就使用线程池开辟多少个线程. 这就可以在1000毫秒后程序执行完毕.

l171147904 2010-03-08
  • 打赏
  • 举报
回复
100分太少?。。。没人回答。。

110,536

社区成员

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

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

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