1、CreateThread()函数
CreateThread
是一种微软在Windows API中提供了建立新的线程的函数,该函数在主线程的基础上创建一个新线程。
线程终止运行后,线程对象仍然在系统中,必须通过CloseHandle
函数来关闭该线程对象。
1 HANDLE CreateThread( 2 LPSECURITY_ATTRIBUTES lpThreadAttributes, 3 SIZE_T dwStackSize, 4 LPTHREAD_START_ROUTINE lpStartAddress, 5 __drv_aliasesMem LPVOID lpParameter, 6 DWORD dwCreationFlags, 7 LPDWORD lpThreadId 8 );
// 第一个参数 lpThreadAttributes 表示线程内核对象的安全属性,一般传入NULL表示使用默认设置。
// 第二个参数 dwStackSize 表示线程栈空间大小。传入0表示使用默认大小(1MB)。
// 第三个参数 lpStartAddress 表示新线程所执行的线程函数地址,多个线程可以使用同一个函数地址。
// 第四个参数 lpParameter 是传给线程函数的参数.
// 第五个参数 dwCreationFlags 指定额外的标志来控制线程的创建,为0表示线程创建之后立即就可以进行调度,如果为CREATE_SUSPENDED则表示线程创建后暂停运行,
这样它就无法调度,直到调用ResumeThread()。
// 第六个参数 lpThreadId 将返回线程的ID号,传入NULL表示不需要返回该线程ID号
1 #include <Windows.h> 2 #include <stdio.h> 3 #include <process.h> 4 5 //HANDLE 6 //WINAPI 7 //CreateThread( 8 // _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, 9 // _In_ SIZE_T dwStackSize, 10 // _In_ LPTHREAD_START_ROUTINE lpStartAddress, 11 // _In_opt_ __drv_aliasesMem LPVOID lpParameter, 12 // _In_ DWORD dwCreationFlags, 13 // _Out_opt_ LPDWORD lpThreadId 14 //); 15 DWORD WINAPI ThreadFun(LPVOID p) { 16 int a = *(int*)p; 17 18 printf("我是子线程,PID = %d,iMym = %d\n", GetCurrentThreadId(), a); 19 20 return 0; 21 } 22 23 24 int main() { 25 HANDLE ZThread; 26 DWORD dwThreadID; 27 int a = 100; 28 ZThread = CreateThread(NULL, 0, &ThreadFun, &a, 0, &dwThreadID); 29 30 }
2、主要的函数
1 CreateThread() 创建一个线程 2 3 ExitThread() 正常结束一个线程的执行 4 5 TerminateThead() 强制终止一个线程的执行 6 7 ResumeThread() 重启一个线程 8 9 SuspendThread() 挂起一个线程 10 11 GetExiCodeThread() 得到一个线程的退出码 12 13 GetThreadPriority() 得到一个线程的优先级 14 15 SetThreadPriority() 设置一个线程的优先级 16 17 CloseHandle() 关闭一个线程的句柄 18 19 CreateRemoteThread() 再另一个进程中创建一个新线程 20 21 PostThreadMessage() 发送一条消息给指定的线程 22 23 GetCurrentThread() 得到当前的线程句柄 24 25 GetCurrentThreadId() 得到当前线程的ID 26 27 GetThreadId() 得到指定线程的ID 28 29 WaitForSingleObject() 等待单个对象 30 31 WaitForMultipleObjects() 等待多个对象
1 static DWORD WINAPI myThreadFun(LPVOID lp); 2 /***************1 CreateThread *******************/ 3 HANDLE m_myCreateThread = CreateThread(NULL,//线程安全属性 4 0,//堆栈大小 5 CCWTestThreadDlg::myThreadFun,//线程函数 6 0,//线程参数 7 0,//线程创建属性 8 NULL);//线程ID 9 10 if (m_myCreateThread == INVALID_HANDLE_VALUE) 11 { 12 AfxMessageBox(L"INVALID_HANDLE_VALUE "); 13 return; 14 } 15 //设置线程优先级 16 SetThreadPriority(m_myCreateThread, THREAD_PRIORITY_ABOVE_NORMAL); 17 ResumeThread(m_myCreateThread); 18 //关闭线程 19 CloseHandle(m_myCreateThread); 20 21 DWORD WINAPI CCWTestThreadDlg::myThreadFun(LPVOID lp) 22 { 23 while (true) 24 { 25 } 26 27 return 0; 28 }
3、创建线程方式2:C++11 标准下的std::thread
1 /***************4 std::thread *******************/ 2 void myC11ThreadFun(); 3 std::thread m_pthreadc11; 4 m_pthreadc11 = std::thread(&CCWTestThreadDlg::myC11ThreadFun, this); 5 //m_pthreadc11.join(); 6 7 //关闭线程 8 if (m_pthreadc11.joinable()) 9 { 10 m_pthreadc11.detach(); 11 } 12 void CCWTestThreadDlg::myC11ThreadFun() 13 { 14 while (true) 15 { 16 if (/*m_bStop*/) 17 { 18 break; 19 } 20 } 21 }
标签:HANDLE,函数,CreateThread,创建,线程,DWORD,多线程 From: https://www.cnblogs.com/Zhouce/p/17846186.html