{
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)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)