用afxbeginthread开启了一个线程,我现在在别的函数中想强行终止该线程,怎么终止呀?我创建该线程的语句如下:
m_pThread=AfxBeginThread(RecvThread……
m_pThread中我查看了半天也没有强行终止的语句呀!
谢谢高手的指点,在线等
m_pThread=AfxBeginThread(RecvThread……
m_pThread中我查看了半天也没有强行终止的语句呀!
谢谢高手的指点,在线等
解决方案 »
- 关于dll和lib里的类的参数问题
- 有关beginpaint返回的HDC问题
- 请教 从文件取串放在edit里
- VC++显示jpeg图片问题!
- 关于CBitmap的LoadBitmap的问题
- 如何改变一个dll(如scrrun.dll)在使用regsvr32注册后在注册表中的项目名称?{0D43FE01-F093-11CF-8940-00A0C9054228}
- 如果一个按钮来实现切分试图的动画效果
- 【求助】对网页标识符分析的源代码。从已保存的网页中提取指定的内容
- 有关DLL的问题(急)
- 急!急!急!
- 谁能给我一个BCGControlBar6.0 的下载URL & Password. 谢谢.
- 高分求助,谁能编程把word打印成prn
具体参数看一下MSDN。
我现在就想在另外一个函数中把这个线程强行结束,不想什么通讯什么的。有什么办法没有?现在在另外一个函数中唯一可控制的只有m_pThread这个。
分不够,另外给,再加50分。解决问题就给分。
谢谢
struct Param
{
UINT nThread;
HANDLE hEvent;
BOOL bBusy;
BOOL bDestroy;
};
同时为此线程CreateEvent,保存到hEvent中,在线程中通过hEvent,WaitForSingleObject来控制它的生死
TerminateThread(hThreadTCPRev,0);
而AfxEndThread( UNIT nExitCode )中是关闭哪个线程?
我很菜,不好意思了。
UINT SendData(void* cs)
{
SOCKET clientSocket=(SOCKET)cs;
while(1)
{
if(info_data.data!="Close!")
{
m_mutex.Lock(); //互锁
numsnd=send(clientSocket,info_data.data,
info_data.data.GetLength(),NO_FLAGS_SET); //发送数据
now=info_data.thread;
m_mutex.Unlock(); //解锁
now->SuspendThread(); //自身挂起
}
else
{ goto bb; } }
bb: closesocketlink((LPVOID)clientSocket); //关闭连接
AfxEndThread(0,true); //结束本线程
return 1;
}
TerminateThread(hThreadG7231,0);hThreadG7231是什么东东?
要终止线程时,变量置为FALSE。在线程中定期检测此变量,当值为FALSE时,退出线程,即可。
你新建线程的句柄
=====================
class CRawThread
{
private:
...
public:
...
friend unsigned __stdcall _raw_thread_function(void *param);
//将线程函数定义为这个类的友元函数,避免线程内部访问类的私有元素的时候出现错误。
};.cpp文件
====================
#include <process.h> //记得这一行...unsigned __stdcall _raw_thread_function(void *param)
{
CRawThread *pThis = (CRawThread *)param; //这里将参数转换为原来的类型
...
//------------------------------------------------------------------------
while(1)
{
if(WaitForSingleObject(pThis->m_hExitThread, 0) == WAIT_OBJECT_0)
{
ResetEvent(pThis->m_hExitThread);
goto EXIT_THREAD_0;
}
...
Sleep(30);
}
//------------------------------------------------------------------------
EXIT_THREAD_0:
...
SetEvent(pThis->m_hExitThreadOk);
_endthreadex(0); return 0;
}BOOL CRawThread::StartThread()
{
if(m_hThread == NULL){
//如果线程没有启动,启动线程
m_hThread = (HANDLE)_beginthreadex(
NULL,
0,
_raw_thread_function,
this, //这里传递参数
0,
&m_uThreadId);
return (m_hThread != NULL);
}
return TRUE;
}void CRawThread::StopThread(DWORD dwWaitMillSecond /*= 500*/)
{
DWORD dwExitCode; if(m_hThread)
{
if(WaitForSingleObject(m_hExitThreadOk, 0) == WAIT_TIMEOUT)
{
SetEvent(m_hExitThread);
WaitForSingleObject(m_hExitThreadOk, dwWaitMillSecond);
GetExitCodeThread(m_hThread, &dwExitCode);
if(dwExitCode == STILL_ACTIVE){
TRACE1("Terminate RawThread 0x%x", m_hThread);
TerminateThread(m_hThread, -1);
}
}
CloseHandle(m_hThread);
ClearThread();
ResetEvent(m_hExitThreadOk);
ResetEvent(m_hExitThread);
}
}