首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

createThread 创建线程,第三个参数线程函数在工程里如何声明

2012-03-21 
createThread 创建线程,第三个参数线程函数在工程里怎么声明。请教下:mfc工程,创建了一个辅助线程,在线程中

createThread 创建线程,第三个参数线程函数在工程里怎么声明。
请教下:
  mfc工程,创建了一个辅助线程,在线程中读取串口,点击“启动”按钮后读取串口数据。
  在那个启动按钮的处理函数中创建这个辅助线程。
  代码如下:
 

C/C++ code
   m_readfilethread = CreateThread(                            (LPSECURITY_ATTRIBUTES)NULL,                             0,                             (LPTHREAD_START_ROUTINE)GetSerialContent,                             GetSafeHwnd(),                             0,                             &ol                         );    ASSERT(m_readfilethread != NULL);   

   

  在程序中CUpperendDlg.h 是这样声明的:
 
C/C++ code
   afx_msg CString WINAPI GetSerialContent(HWND hSendWnd);   
 

  编译后,报下面这样的错误:
  error C2440: 'type cast' : cannot convert from '' to 'unsigned long (__stdcall *)(void *)'
None of the functions with this name in scope match the target type

[解决办法]
线程函数声明:
DWORD WINAPI ThreadProc(LPVOID lpParameter);

你的线程函数貌似是一个消息处理函数,线程函数应该是一个全局函数。

如果在线程函数需要使用某个对象,那么可以用lpParameter传递这个对象的地址。
[解决办法]
static unsigned long WINAPI GetSerialContent(void *param);
[解决办法]
使用类静态函数也是可以的,但是类静态函数只能访问类静态成员,所以如果想访问类的其它成员,还是用全局函数的好,然后把对象指针通过参数传递进去。
[解决办法]
探讨

请问这个函数在CUpperendDlg.h里面如何声明。

热点排行