调用socket中recvfrom监听网络端口的程序作为子线程怎样让主线程不卡住解决思路
发布时间:2011-06-23 14:23:51 文章来源:www.iduyao.cn 采编人员:星星草
调用socket中recvfrom监听网络端口的程序作为子线程怎样让主线程不卡住
具体:我写了一个用于监听本机端口从而接收发往本机的UDP报文,用到了socket中的recvfrom函数,但是,我想的是设置一个进程,主线程进行界面方面的操作,而让这个程序(socket接收报文)作为一个子线程的形式运行于后台,获得数据之后,将该数据传给这个主线程(设置全局变量),但是,当运行到recvfrom这个函数是,它是一个听的状态,导致子线程阻塞,从而让主线程也阻塞,界面就卡着像死机一样,但是当接收到UDP报文的时候,界面有恢复正常,高手帮我解决下啊,我想在子线程调用recvfrom函数监听端口的时候,主线程不至于卡机。谢谢哪位高手帮忙。
------解决方案--------------------
就是开辅线程而已了。比如:
Thread th=new Thread(new ThreadStart(YourMethod));//开辅线程
th.IsBackground=true;
th.Start();
public void YourMethod()
{
//接受数据的方法。
}
需要注意的,如果你在子线程(也就是辅线程里面,接受到数据后,需要修改主线程UI界面的显示的数据,那么你会得到“不是在创建控件的线程。。。。”异常。解决方法如下:
解决方法有两个~
第一:
Control.CheckForIllegalCrossThreadCalls = false;
线程开始的时候加这么一句,OK,看不到错误了~
啥都能用了~
第二:
用委托,在05里,每个控件都有个InvokeRequired的属性~
判断一下是不是true,是的话进行Invoke操作的,完事了~
//建立个委托
private delegate string returnStrDelegate();
//搞个最简单滴取值滴方法~
private string returnSchool()
{
return CB_School.SelectedValue.ToString();
}
//判断一下是不是该用Invoke滴~,不是就直接返回~
private string returnCB(returnStrDelegate myDelegate)
{
if (this.InvokeRequired)
{
return (string)this.Invoke(myDelegate);
}
else
{
return myDelegate();
}
}
//别的线程里的调用哇~
string _school = returnCB(returnSchool);
------解决方案--------------------
定,支持楼主!高手帮忙解答下啊!
------解决方案--------------------
没有必要开辅助线程了,如果你不会辅助线程的话。
设定个timer就可以,简单。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
关于visual studio 2005的工程文件*.vcproj的问题
请问:Visual Studio 2005 新建一个工程之后,会自动生产一个*.vcproj的一个文件,这...
-
用MFC画图的问题
我现在要用随机数产生300个固定的点保存在数组中,并在ondraw里画出这300个点,而且通过定时器使这300个点做运动。...
-
VS2010中的C++怎么连接数据库?
之前一直用VC++6.0的、现在想学学用最新的VS、但是感觉连接数据库和之前不一样了、具体应该怎么弄...
-
CLI编程 高手帮忙
我现在用C++/CLI 混编,
我有一个方法, 是调用一个C 的类库 得到一个 char * 的值
现在我...
-
新手求教::VC.NET2003里面的"添加变量"菜单变灰了,怎么弄?
最近学着用.net写程序,以前用的是6.0,不知道为什么我设计的EDIT Con...
-
刚学习vc.net 请教一个String做参数的问题,请高手指教一下
下面的代码为什么不能编译呢,出现这个错误呢
.\clr.cpp(12) : error C3...
-
VS2003中通过ADO取SQL2003中bigint 负值变正值的问题,求助!
在SQL2003中 数据库中假设 一个bigint类型的数据位-1234这样的值,通过如...
-
新手学习VC用那个版本的编译器好!
新手学习VC用那个版本的编译器好!?
------解决方案--------------------
VC++6.0
------解决...
-
正则表达式
有这样的字符串
"1,',2"",3"
希望将单个的"替换成单引号,将连续两个的""替换成一个双引号。
正则表达式该如何写。
...
-
为什么<<精通MFC>>附带的源程序不能编译成功
vc2010编译后有两个错误提示,分别如下,
错误一:
1>c:\program files\microsoft vi...