| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3119 人关注过本帖
标题:[求助]如何实现线程间的通信
只看楼主 加入收藏
xc_lw
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2004-11-12
收藏
 问题点数:0 回复次数:5 
[求助]如何实现线程间的通信

想写这样一个程序.采用双线程.T1去搜索硬盘上的*.exe文件.搜到以后立即告诉T2,然后T2将此文件名列出到窗体上的ListBox中.同时T1继续搜索.那么T1和T2之间的即时通信如何实现呀?

搜索更多相关主题的帖子: 线程 通信 
2006-02-28 15:55
月夜枫华
Rank: 4
等 级:贵宾
威 望:12
帖 子:437
专家分:42
注 册:2006-1-2
收藏
得分:0 

首先,定义一个公有集合
ArrayList AL_FileName=new ArrayList();
T1的线程代理函数
private void T1()
{
while(true)
{
string s=this.selectExtFile();//假设这是用来执行查找文件的函数
//在设置好循环的结束标志
}
}
private void T2()
{
while(true)
{
string filename=this.getAndDelItem();
if(filename!="")
{
//显示filename
}
//设置循环结束条件
}
}
private string getAndDelItem()
{
string s="";
lock(this)
{
if(this.AL_FileName.Count>0)
{
s=this.AL_FileName[0];
this.AL_FileName.RemoveAt(0);
}
}
return s;
}


2006-02-28 17:35
xc_lw
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2004-11-12
收藏
得分:0 
以下是引用月夜枫华在2006-2-28 17:35:00的发言:

首先,定义一个公有集合
ArrayList AL_FileName=new ArrayList();
T1的线程代理函数
private void T1()
{
while(true)
{
string s=this.selectExtFile();//假设这是用来执行查找文件的函数
//在设置好循环的结束标志
}
}
private void T2()
{
while(true)
{
string filename=this.getAndDelItem();
if(filename!="")
{
//显示filename
}
//设置循环结束条件
}
}
private string getAndDelItem()
{
string s="";
lock(this)
{
if(this.AL_FileName.Count>0)
{
s=this.AL_FileName[0];
this.AL_FileName.RemoveAt(0);
}
}
return s;
}

这样能做到即时通信吗?你这样做好象是两个线程好象是异步执行的呀!可不可以用消息队列来实现呢.T2搜到一个文件,向主线程发一消息.主线程接到消息后会触发相关的事件.


2006-03-01 09:21
月夜枫华
Rank: 4
等 级:贵宾
威 望:12
帖 子:437
专家分:42
注 册:2006-1-2
收藏
得分:0 

要是用到消息有这个问题,比如T1线程找到了一个exe,要求T2显示,但T2并没有获得CPU进行执行,如果T1再找到一个的时候则有可能将前一个已经找的文件名丢失,使用缓存队列就是为了避免这种情况
如果对即时要求比较高,也可以让T2使用线程池


2006-03-01 12:41
whipk
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-2-28
收藏
得分:0 

深奥


.NET大海里的一条鱼
2006-03-01 12:50
ppislander
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-11-16
收藏
得分:0 
不懂
2006-03-06 22:07
快速回复:[求助]如何实现线程间的通信
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019402 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved