还是线程创建的问题

eehinjor 2003-08-15 09:31:50
我的线程怎么都创建不了
类定义中如下:
class CComTreadDlg : public CDialog
{
public:
HANDLE hCommDev;
HANDLE comThreadHwnd;
DWORD CommWatchThread(LPDWORD lpdwParam);
}

/////////////////////////////////////////////////////////////////
int CComTreadDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{//创建通信线程
comThreadHwnd=CreateThread((LPSECURITY_ATTRIBUTES)NULL,
0,
(LPTHREAD_START_ROUTINE)CommWatchThread,
(LPVOID)NULL,
0,
&dwThreadID1);
}
老是出现以下错误:
C:\Program Files\Microsoft Visual Studio\MyProjects\ComTread\ComTreadDlg.cpp(256) : error C2440: 'type cast' : cannot convert from '' to 'unsigned long (__stdcall *)(void *)'

我看了论坛的其他帖子把CommWatchThread定义为全局函数,可我在这个进程函数中要用到hCommDev就说没有定义。

不知道该如何解决这一问题。

谢谢
...全文
37 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawndu 2003-08-20
  • 打赏
  • 举报
回复
staticip(staticip) 已经解决了你问题,不过还有一个问题,你创建线程在MFC中应该用AfxBeginThread这个函数
vcforever 2003-08-20
  • 打赏
  • 举报
回复
你的线程函数应该是static的!
joinrry 2003-08-18
  • 打赏
  • 举报
回复
简单的问题
zhouyong0371 2003-08-16
  • 打赏
  • 举报
回复
都说完了,这个帖子可以结了
staticip 2003-08-16
  • 打赏
  • 举报
回复

CComTreadDlg * pThis=(CComTreadDlg *)lpdwParam;

if(!SetCommMask(pThis->hCommDev,EV_RXCHAR|EV_TXEMPTY))
return FALSE;

不过创建线程的时候一定要把this指针传过去:
comThreadHwnd=CreateThread((LPSECURITY_ATTRIBUTES)NULL,
0,
(LPTHREAD_START_ROUTINE)CommWatchThread,
(LPVOID)this,
0,
&dwThreadID1);
eehinjor 2003-08-15
  • 打赏
  • 举报
回复
怎么利用this指针访问hCommDev.

我按照你的方法,原来的问题是解决了,可hCommDev还是不能访问。

if(!SetCommMask(this->hCommDev,EV_RXCHAR|EV_TXEMPTY))
return FALSE;

错误如下
:\Program Files\Microsoft Visual Studio\MyProjects\ComTread\ComTreadDlg.cpp(288) : error C2671: 'CommWatchThread' : static member functions do not have 'this' pointers
C:\Program Files\Microsoft Visual Studio\MyProjects\ComTread\ComTreadDlg.cpp(288) : error C2227: left of '->hCommDev' must point to class/struct/union
Error executing cl.exe.
staticip 2003-08-15
  • 打赏
  • 举报
回复
把CommWatchThread定义为static,然后把this指针作为参数传给CommWatchThread,CommWatchThread利用this指针访问hCommDev:

class CComTreadDlg : public CDialog
{
public:
HANDLE hCommDev;
HANDLE comThreadHwnd;
static DWORD CommWatchThread(LPDWORD lpdwParam);
}

int CComTreadDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{//创建通信线程
comThreadHwnd=CreateThread((LPSECURITY_ATTRIBUTES)NULL,
0,
(LPTHREAD_START_ROUTINE)CommWatchThread,
(LPVOID)this,
0,
&dwThreadID1);
}

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧