【运动控制】创建线程执行缓冲区


//------CAD线程数据------//
typedef struct _HXThreadDataInfo
{
	BOOL bThreadRun;
	BOOL bThreadCAD1;
	BOOL bThreadCAD2;
	BOOL bThreadCAD3;
	BOOL bThreadCAD4;
	unsigned long ulDeepA1; //深度A1--D80
	unsigned long ulDeepB1; //深度B1--D82
	unsigned long ulDeepA2; //深度A2--D84
	unsigned long ulDeepB2; //深度B2--D86
}HXThreadDataInfo;

HXThreadDataInfo* pHXDataInfo;

//声明线程函数
LPTHREAD_START_ROUTINE HXCADProc(LPVOID pParam);



//--------开辟线程----------//
	if ( pHXDataInfo->bThreadRun == FALSE )
	{
		if ( pHXDataInfo->bThreadCAD1 == TRUE || pHXDataInfo->bThreadCAD2 == TRUE || pHXDataInfo->bThreadCAD3 == TRUE || pHXDataInfo->bThreadCAD4 == TRUE )
		{
			unsigned long ulAxisSts0;
			unsigned long ulAxisSts1;
			rtn = PMC_Get_Execute_Axis(&ulAxisSts0,0);//判断缓冲区是否完成
			rtn = PMC_Get_Execute_Axis(&ulAxisSts1,1);//判断缓冲区是否完成
			if (0 != (ulAxisSts0 & 0x1<<0) || 0 != (ulAxisSts0 & 0x1<<1) || 0 != (ulAxisSts0 & 0x1<<2))
			{
				pHXDataInfo->bThreadCAD1 = FALSE;
			}
			if (0 != (ulAxisSts0 & 0x1<<3) || 0 != (ulAxisSts0 & 0x1<<4) || 0 != (ulAxisSts0 & 0x1<<5))
			{
				pHXDataInfo->bThreadCAD2 = FALSE;
			}
			if (0 != (ulAxisSts1 & 0x1<<0) || 0 != (ulAxisSts1 & 0x1<<1) || 0 != (ulAxisSts1 & 0x1<<2))
			{
				pHXDataInfo->bThreadCAD3 = FALSE;
			}
			if (0 != (ulAxisSts1 & 0x1<<3) || 0 != (ulAxisSts1 & 0x1<<4) || 0 != (ulAxisSts1 & 0x1<<5))
			{
				pHXDataInfo->bThreadCAD4 = FALSE;
			}
			unsigned long threadID;
			HANDLE hTread;
			hTread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)HXCADProc,(LPVOID)pHXDataInfo,CREATE_SUSPENDED,&threadID);
			if(hTread == NULL)
			{
				delete pHXDataInfo;
				return 1;
			}
			pHXDataInfo->bThreadRun = TRUE;
			ResumeThread(hTread);
		}
	}



LPTHREAD_START_ROUTINE HXCADProc(LPVOID pParam)
{
	HXThreadDataInfo* pHXDataInfo = (HXThreadDataInfo*)pParam;
	BOOL bOpenCAD1 = pHXDataInfo->bThreadCAD1;
	BOOL bOpenCAD2 = pHXDataInfo->bThreadCAD2;
	BOOL bOpenCAD3 = pHXDataInfo->bThreadCAD3;
	BOOL bOpenCAD4 = pHXDataInfo->bThreadCAD4;


	//---------------
	rtn = PMC_End_Buffer(&num,CardNum);
	rtn = PMC_Execute_Buffer(0,0,1);
	bFinishCAD3 = TRUE;
	Sleep(1);

	//-----------------
	_endthread();
	delete pHXDataInfo;
	return 0;
}



 

CreateThread和_beginthread区别及使用


关于_beginthreadex、_beginthread和CreateThread




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值