各位大侠:
我用VC6.0写的串口通讯程序,想把负责读写程序的线程当做类的一个成员函数以方便管理,结果编译通不过,代码如下,各位大侠帮忙啊,小弟新手。
DWORD WINAPI TComm_Operate::CommPortWorkThread(LPVOID pParam) //传送数据工作者线程
{
while (TRUE)
{
if (WaitForSingleObject(m_TransEvent, 1000) == WAIT_OBJECT_0)
{
_try
{
m_Running = TRUE;
//发送数据
if (!Write((char *)m_SendBuff, m_SendLeng))
continue;
//接收数据
if (!Read((char *)m_RecvBuff, m_RecvLeng))
continue;
//置位传送数据完成事件句柄
SetEvent(m_TranOverEvent);
}
_finally
{
m_Running = FALSE;
}
}
}
return 0;
}void TComm_Operate::StartServer()
{
m_TransThread = CreateThread(NULL,0,CommPortWorkThread,this,0,NULL);
}结果在
m_TransThread = CreateThread(NULL,0,CommPortWorkThread,this,0,NULL);有问题,
提示error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'
各位大侠帮忙啊,在线等
我用VC6.0写的串口通讯程序,想把负责读写程序的线程当做类的一个成员函数以方便管理,结果编译通不过,代码如下,各位大侠帮忙啊,小弟新手。
DWORD WINAPI TComm_Operate::CommPortWorkThread(LPVOID pParam) //传送数据工作者线程
{
while (TRUE)
{
if (WaitForSingleObject(m_TransEvent, 1000) == WAIT_OBJECT_0)
{
_try
{
m_Running = TRUE;
//发送数据
if (!Write((char *)m_SendBuff, m_SendLeng))
continue;
//接收数据
if (!Read((char *)m_RecvBuff, m_RecvLeng))
continue;
//置位传送数据完成事件句柄
SetEvent(m_TranOverEvent);
}
_finally
{
m_Running = FALSE;
}
}
}
return 0;
}void TComm_Operate::StartServer()
{
m_TransThread = CreateThread(NULL,0,CommPortWorkThread,this,0,NULL);
}结果在
m_TransThread = CreateThread(NULL,0,CommPortWorkThread,this,0,NULL);有问题,
提示error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'
各位大侠帮忙啊,在线等
static DWORD WINAPI CommPortWorkThread(LPVOID pParam);MFC程序推荐不用CreateThread而用AfxBeginThread 来建立线程,这样函数可以声明为
static UINT CommPortWorkThread( LPVOID pParam );
实现为
CWinThread* pThread = AfxBeginThread(CommPortWorkThread, this);
当然pThread作为成员变量更利于其他地方使用。
{
TComm_Operate* pThis = (TComm_Operate*)pParam;
while (TRUE)
{
if (WaitForSingleObject(pThis->m_TransEvent, 1000) == WAIT_OBJECT_0)
{
_try
{
pThis->m_Running = TRUE;
//发送数据
if (!Write((char *)pThis->m_SendBuff, pThis->m_SendLeng))
continue;
//接收数据
if (!Read((char *)pThis->m_RecvBuff, pThis->m_RecvLeng))
continue;
//置位传送数据完成事件句柄
SetEvent(pThis->m_TranOverEvent);
}
_finally
{
pThis->m_Running = FALSE;
}
}
}
return 0;
}
因为线程函数必须是静态函数,静态函数没有this可用,所以只能当作参数传递“this”进来