您的位置:首页 > 其它

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; //删除线程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: