哪位大神帮我看看这个c#的程序,是一直处于监听状态,但是运行后,程序就卡死了,怎么修改

哪位大神帮我看看这个c#的程序,是一直处于监听状态,但是运行后,程序就卡死了,怎么修改,第1张

while (!done)//使用永真循环另其一直处于监听状族侍态

{

Thread.Sleep(100) //兆族吵休息100毫秒,切换进穗晌程,否则会死循环卡死

byte[] bytes = listener.Receive(ref groupEP)

string strIP

strIP = "信息来自" + groupEP.Address.ToString()//获得发信人的IP

string strInfo = Encoding.GetEncoding("gb2312").GetString(bytes, 0, bytes.Length)//获得信息

MessageBox.Show(strInfo, strIP)

}

还是我来回答这个问宏如题吧。

其实,DLL与迟绝野EXE是非常不同的两类可执行模块,尤其在线程的创建释放等事务上面,而对于在DLLMAIN中创建线程,那则是非常不能原谅的事情,因为此时创建码喊的线程无法正常释放。

不过,要解决你这个问题,其实并不是很难的事情,有如下几步:

1. 运行一个DLL。

2. 在DLL加载完成之后,显示的使用函数启动一个线程。

3. 在这个线程中使用WaitForSingleObject()函数,把等待的超时时间设为你需要的定时时间。

这样,你就可以在WaitForSingleObject函数解阻之后,做你要做的事情了。

下面,是简单的伪码:

volatile bool _g_vbThreadRun = false

static HANDLE _g_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL)

unsigned int fThreadTimer(void* pv)

{

while( _g_vbThreadRun )

{

// the event this function waited must be created in advance.

WaitForSingleObject(_g_hEvent, 3000)// 3 s

// out time

// do something

}

return 0

}

void LaunchTimer()

{

_g_vbThreadRun = true

AfxBeginThread(fThreadTimer, NULL)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12372816.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存