vc创建一个线程的方法:
2008-03-06 17:40
357 查看
vc创建一个线程的方法:
创建线程使用CreateThread
The CreateThread function creates a thread to execute within the address space of the calling process.
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize, 指定初始提交栈的大小
LPTHREAD_START_ROUTINE lpStartAddress,
//由线程执行,表示线程的起始地址,指定线程入口函数,
//该入口函数的参数类型以及返回类型要与ThreadProc()函数声明的类型要保持一致
LPVOID lpParameter, //指定一个单独的值传递给线程
DWORD dwCreationFlags, //指定控件线程创建的附加标记
LPDWORD lpThreadId ); //指向一个用来接收线程的标识符变量
参数1:指向SECURITY_ATTRIBUTES结构体的指针。
vc终止线程有三种方法:
1.线程可以在自身内部调用AfxEndThread()来终止自身的运行
2.可以在线程的外部调用BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode )来强行终止一个线程的运行,
然后调用CloseHandle()函数释放线程所占用的堆栈
TerminateThread会有资源泄漏,不要万不得已,不要用这个函数
DWORD code;
if(GetExitCodeThread(MonitorComm,&code)) //MonitorComm 你创建的线程句柄
if(code==STILL_ACTIVE)
{
TerminateThread(MonitorComm,0);
CloseHandle(MonitorComm);
}
这样就安全了
3.第三种方法是改变全局变量,使线程的执行函数返回,则该线程终止。
下面的例子来演示第三种方法
全局变量m_end来表示是否要结束线程
bool m_end = false;
HWND hWnd;
启动线程:
CWinThread* pThread;
hWnd = GetSafeHwnd();
pThread = AfxBeginThread(ThreadProc,hWnd);
pThread->m_bAutoDelete = false;
线程的函数
UINT ThreadProc(LPVOID pParam);
UINT ThreadProc(LPVOID pParam)
{
while(!m_end)
{
AfxMessageBox("test;");
::Sleep(2000);
}
return 0;
}
终止线程代码
m_end = true;
WaitForSingleObject(pThread->m_hThread,INFINITE); //等待线程结束
delete pThread; //删除线程
创建线程使用CreateThread
The CreateThread function creates a thread to execute within the address space of the calling process.
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize, 指定初始提交栈的大小
LPTHREAD_START_ROUTINE lpStartAddress,
//由线程执行,表示线程的起始地址,指定线程入口函数,
//该入口函数的参数类型以及返回类型要与ThreadProc()函数声明的类型要保持一致
LPVOID lpParameter, //指定一个单独的值传递给线程
DWORD dwCreationFlags, //指定控件线程创建的附加标记
LPDWORD lpThreadId ); //指向一个用来接收线程的标识符变量
参数1:指向SECURITY_ATTRIBUTES结构体的指针。
vc终止线程有三种方法:
1.线程可以在自身内部调用AfxEndThread()来终止自身的运行
2.可以在线程的外部调用BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode )来强行终止一个线程的运行,
然后调用CloseHandle()函数释放线程所占用的堆栈
TerminateThread会有资源泄漏,不要万不得已,不要用这个函数
DWORD code;
if(GetExitCodeThread(MonitorComm,&code)) //MonitorComm 你创建的线程句柄
if(code==STILL_ACTIVE)
{
TerminateThread(MonitorComm,0);
CloseHandle(MonitorComm);
}
这样就安全了
3.第三种方法是改变全局变量,使线程的执行函数返回,则该线程终止。
下面的例子来演示第三种方法
全局变量m_end来表示是否要结束线程
bool m_end = false;
HWND hWnd;
启动线程:
CWinThread* pThread;
hWnd = GetSafeHwnd();
pThread = AfxBeginThread(ThreadProc,hWnd);
pThread->m_bAutoDelete = false;
线程的函数
UINT ThreadProc(LPVOID pParam);
UINT ThreadProc(LPVOID pParam)
{
while(!m_end)
{
AfxMessageBox("test;");
::Sleep(2000);
}
return 0;
}
终止线程代码
m_end = true;
WaitForSingleObject(pThread->m_hThread,INFINITE); //等待线程结束
delete pThread; //删除线程
相关文章推荐
- vc创建一个线程和销毁的方法
- vc创建一个线程的方法
- VC中关于创建一个新的线程的方法
- VC如何创建一个新的线程
- 同时创建多个线程,它们都访问一个对象中的同步方法,怎么确保第一个线程最先拿到对象锁,否则,怎么保证多个线程之间的有序通信
- VC中创建多个线程的方法
- 创建并运行一个java线程方法介绍
- 错误:在一个线程上创建的控件不能成为在另一个线程控件的父级(处理方法)
- [转]VC++创建一个线程并传递参数
- 如何在VC中利用系统函数创建一个新的线程
- VC如何对新创建的一个线程暂停或重启
- VC++ 如何创建一个线程并传递参数
- VC中创建多个线程的方法
- VC如何对新创建的一个线程暂停或重启
- VC++ 数个创建线程方法的不同点
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- VC启动一个新线程的三种方法
- 创建一个线程的方法
- NET中创建一个线程有几种方法
- VC启动一个新线程的三种方法