我在线程里搜索局域网里工作组和组内的主机,当对某个组没有权限或者组内没有主机时会花上很长的时间。在取局域网资源信息的api函数未退出时,我该怎样终止该线程并且不会引起内存泄漏。在网上查了一下用Terminate的方法不行,先Suspend再free程序会死掉,用TerminateThread好像会引起内存泄漏,
对多线程不了解,望大家指点一下??
对多线程不了解,望大家指点一下??
解决方案 »
- 关于用enter代替TAB键。。路过高手请帮忙解答下
- 几个菜鸟问题
- D区精神病院-纯属虚构
- [求助]如何解决集合超过256个元素的限制?
- 有单要深圳的同行一起做,希望能懂delphi三层,但愿能共同进步!
- 请问,用fastreport如何打印出动态的选择打印字段的报表??????????????
- 怎样远程控制软件的启动\关闭?
- 如何在一个form里的一个按钮click事件里关闭当前窗口,打开另外一个窗口.谢谢..
- 请问JPG图形的缩放(W和H变小变大)
- 【激情点击】->->->->->->->->->->给回复是12:00:00整的回复人100分<-<-<-<-<-<-<-<-<-<-<-<-也许就是你,赶快参与吧:)
- edit.text的变化问题
- ListBox控件中一行中使用,如何象RICHTXT一样,每个字都能改变不同字体和颜色啊?在线等啊
23楼 CONTEXT Context;
DWORD WINAPI TestThread(LPVOID param)
{
HANDLE event=(HANDLE)param;
GetThreadContext(GetCurrentThread(),&Context);
DWORD &ip=Context.Eip;
__asm
{
mov eax,jmpexit;
mov [ip],eax;
jmp jmpcontinuedoing;
jmpexit:
jmp ex;
jmpcontinuedoing:
}
SetEvent(event);
Sleep(10000);
__asm
{
ex:
nop;
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD threadid;
HANDLE event=CreateEvent(NULL,FALSE,FALSE,NULL);
for(;;)
{
HANDLE hand=CreateThread(NULL,0,TestThread,NULL,0,&threadid);
WaitForSingleObject(event,INFINITE); //等线程初始化完成
SetThreadContext(hand,&Context);
WaitForSingleObject(hand,INFINITE); //等线程结束
}
}
在网上找到这么一段,好像是vc的吧,没怎么看懂
WaitForSingleObject(event,INFINITE); //等线程初始化完成
SetThreadContext(hand,&Context);
WaitForSingleObject(hand,INFINITE); //等线程结束 这些具体是什么意思啊,不知道有人看过这段代码没有
这样的线程,用TerminateThread会不会内存泄漏啊
31楼的话没有看懂
有异步版本的api就别怕麻烦用异步的吧,没有的话就尽量忍到api跑完吧,或者是由线程通知主线程已经搞定了
SetThreadContext(hand,&Context);
WaitForSingleObject(hand,INFINITE); //等线程结束 其实就是实现多线程的同步。。
至于上面的汇编代码,俺就不懂了!呜呜
你这个服务应该有IP断的范围,设计一个线程池管理那么多的线程
如果全部未结束,可能会出问题,比如线程等待的资源被你free了,访问操作了不合法的位置