VC2012 多线程

本文介绍了VC2012中多线程的概念,包括工作者线程和用户界面线程的区别,强调工作者线程不应处理用户界面操作。接着详细讲述了创建线程的`CreateThread()`函数,以及线程的退出方式,如线程自然结束、`ExitThread()`函数和`TerminateThread()`函数。最后,提到了互斥对象在确保线程同步中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作者线程和用户界面线程

MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。

 所以不要在工作者线程中做用户事件响应也不要做其他界面操作 .

二  CreateThread()

HANDLE WINAPI CreateThread(
              _In_opt_  LPSECURITY_ATTRIBUTES lpThreadAttributes, //子进程能否继承这个线程句柄
              _In_      SIZE_T dwStackSize,                       //线程栈大小   
              _In_      LPTHREAD_START_ROUTINE lpStartAddress,    //线程函数名称
              _In_opt_  LPVOID lpParameter,                       //传入线程函数的参数
              _In_      DWORD dwCreationFlags,       //0:立即启用新线程, CREATE_SUSPENDED:挂起
              _Out_opt_ LPDWORD lpThreadId);                      //保存新线程的ID号

 

DWORD WINAPI MyThreadFunction( LPVOID lpParam );
HANDLE  hThreadArray;
DWORD   dwThreadIdArray;
hThreadArray = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MyThreadFunction, "param",0,&dwThreadIdArray);  

if (hThreadArray[i] == NULL)        
{           ExitProcess(3);        }

// Wait until all threads have terminated.   
WaitForMultipleObjects(MAX_THREADS, hThreadArray, TRUE, INFINITE);

TerminateThread(hThreadArray,0);
CloseHandle(hThreadArray);
hThreadArray = NULL;

 

注意:  线程函数必须是全局函数或者静态函数, 否则会提示类型转换错误.

          WaitForMultipleObjects()等待线程结束

 

三 退出

1 线程结束//调用析构函数,释放线程栈,线程内核对象减一  .总之很完美

2 ExitThread(dwExitCode) 线程中调用此函数退出

3 TerminateThread(hThreadArray); 线程调用此函数结束其他线程 ,用TerminateThread结束的线程系统会保留线程栈以便其他线程访问.

 

四 互斥对象

使用互斥对象保证只有一个进程运行

//Check and create mutex.
	m_hMutex = CreateMutex(NULL, FALSE, UTILITY_NAME);//互斥对象用来多线程访问共享资源
	if(m_hMutex==NULL)
	{
		MessageBox(_T("創建互斥對象失敗!!"),UTILITY_NAME,MB_OK|MB_ICONINFORMATION);
		CloseHandle(m_hMutex);		
		EndDialog(1);
		return FALSE;
	}
	if(GetLastError() == ERROR_ALREADY_EXISTS)
	{
		MessageBox(TEXT("本程序已經在運行!!"),UTILITY_NAME,MB_OK|MB_ICONINFORMATION);
		CloseHandle(m_hMutex);
		EndDialog(1);
		return FALSE;
	}


 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值