怎么样得到线程前后运行的时间

Hexudong1979 2006-10-10 03:25:43
比如:
for (int i = 1; i <= 50; i++)
{
Thread t = new Thread(new ThreadStart(ThreadProc));
t.Start();
}

private void ThreadProc()
{
//查询数据操作
}

而ThreadProc方法是执行一个海量级别的数据库数据查询,那我怎么得到每个查询前后的时间啊?
也就是说,每个线程前后运行的时间?

多谢高手相助了!
...全文
788 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hexudong1979 2006-10-11
  • 打赏
  • 举报
回复
程序基本结束,宣告胜利,多谢高手们的帮助!
Knight94 2006-10-11
  • 打赏
  • 举报
回复
by the way, you should remove "[STAThread]" attribute from function named "Main".
雪狐 2006-10-11
  • 打赏
  • 举报
回复
都是高人,学习、学习、再学习!
Knight94 2006-10-11
  • 打赏
  • 举报
回复
Sample code as follows:
public class ThreadClass
{
private int nThreadID;
private TimeSpan tsRunning;
public int ID
{
get{ return nThreadID;}
}
public TimeSpan Duration
{
get{ return tsRunning;}
}

public ThreadClass( int ThreadID )
{
nThreadID = ThreadID;
}

public void ThreadFun( object stateinfo )
{
DateTime dtStart = DateTime.Now;

Thread.Sleep( 2000 );//Only for test

tsRunning = DateTime.Now - dtStart;

ManualResetEvent mr = stateinfo as ManualResetEvent;
if( mr != null )
mr.Set();
}
}

//Start threads
ThreadClass[] subArray = new ThreadClass[5];
ManualResetEvent[] manualEvents = new ManualResetEvent[5];

for( int threadNum = 0; threadNum < 5; threadNum++)
{
subArray[threadNum] = new ThreadClass( threadNum );
manualEvents[threadNum] = new ManualResetEvent( false );
ThreadPool.QueueUserWorkItem(new WaitCallback(subArray[threadNum].ThreadFun),
manualEvents[threadNum]);
}

WaitHandle.WaitAll( manualEvents );//Wait all threads finished
foreach( ThreadClass thdSub in subArray )
Debug.WriteLine( string.Format( "{0} thread run {1}",
thdSub.ID, thdSub.Duration ) );
Hexudong1979 2006-10-11
  • 打赏
  • 举报
回复
to 怎么样知道我所有线程已经结束?

我已经想到办法了,就是在xxx中申明一个全局变量hashtable,添加new一个thread的对象,然后加一个timer,然后委托一个tick事件,在事件中判断hashtable中的thread对象是否已经结束,如果全部结束,则计算时间,时间记录是根据设定的数组进行设置的
www_123du_com 2006-10-11
  • 打赏
  • 举报
回复
Hexudong1979(何须懂何必懂) ( ) 信誉:100 Blog 2006-10-11 09:55:00 得分: 0


怎么样知道我所有线程已经结束?
_______________

要么一个一个检查ThreadState,要么设一个标记,结束一个则标记一下。(比如声明个endCount=0;每个线程结束时加1)
Hexudong1979 2006-10-11
  • 打赏
  • 举报
回复
怎么样知道我所有线程已经结束?
Hexudong1979 2006-10-11
  • 打赏
  • 举报
回复
代码如下:
在类xxx中有一个记录时间结果显示的文本,根据数据a、b,我怎么样得到时间显示到我的文本中去呢,是不是在位置一操作啊?但是我去尝试了一下,不行的,因为click事件中启动50个线程之后,就不管继续执行了,根本得不到想要的结果的,请高手再帮帮忙。

public class xxx
{
......
private void button1_Click(object sender, System.EventArgs e)
{
a = new string[(int)nupUsers.Value];
b = new string[(int)nupUsers.Value];
try
{
for (int i = 0; i < 50; i++)
{
MyThread thread = new MyThread();

thread.i = i;

Thread t = new Thread(new ThreadStart(thread.ThreadProc));

t.Start();
}

//位置一
txtResult.Text = "...."
}
catch(Exception error)
{
MessageBox.Show(error.Message);
}
}

public static string[] a;
public static string[] b;
}

public class MyThread
{
public MyThread()
{
}
public int i;//记录把数据放到哪个数组里

public void ThreadProc()
{
xxx.a[i] = DateTime.Now.TimeOfDay.ToString();
try
{
//查询操作
}
catch(Exception error)
{
throw error;
}

xxx.b[i] = DateTime.Now.TimeOfDay.ToString();
}
}
股神 2006-10-10
  • 打赏
  • 举报
回复
看看。;。,
Nara 2006-10-10
  • 打赏
  • 举报
回复
你的平台是什么?这对确定solution很关键的,看看《深入理解计算机系统》第9章吧
wjjdnajj 2006-10-10
  • 打赏
  • 举报
回复
路过来看看
diandian82 2006-10-10
  • 打赏
  • 举报
回复
string strEndTime = DateTime.Now.timeofday.tostring();
最简单的办法是写在线程执行完毕的后面。
大选 2006-10-10
  • 打赏
  • 举报
回复
写下log啊,嘿嘿
myminimouse 2006-10-10
  • 打赏
  • 举报
回复
板凳+学习
Knight94 2006-10-10
  • 打赏
  • 举报
回复
to 说的是正确的,所以说,我该怎么作才能得到我想要的结果?

大致思路已经说了,
但是如果是多个线程,需要用线程类来区分线程之间的数据不同。

那么参看copico(一路向北)最后提的方法,这是可行的。
wthorse 2006-10-10
  • 打赏
  • 举报
回复
我今天上午多线程刚好用到一路向北的最后例子。不过我分了好几个部分。
SPARON 2006-10-10
  • 打赏
  • 举报
回复
学习
copico 2006-10-10
  • 打赏
  • 举报
回复
private static double[] b = new double[50];

private void CreatePro()
{
for (int i = 1; i <= 50; i++)
{
a aa = new a();
aa.i = i;

Thread t = new Thread(new ThreadStart(aa.ThreadProc));

t.Start();
}

}

class a
{
public int i;//记录把数据放到哪个数组里

public DateTime t1,t2;
public void ThreadProc()
{
t1=DateTime.Now;
//查询数据操作

t2=DateTime.Now;

System.TimeSpan t3 = t2 -t1;
b[i] = double.Parse(t3.TotalMilliseconds.ToString());
}


}
jedliu 2006-10-10
  • 打赏
  • 举报
回复
public declare function GetThreadTimes Lib "kernal32"
获取与一个线程的经过时间有关的信息!
Hexudong1979 2006-10-10
  • 打赏
  • 举报
回复
只要帮我解决了。
分数不够还可以另外再加,我这儿还有两年前留下的2k分样子
加载更多回复(20)

110,533

社区成员

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

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

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