关于线程创建的问题

dulvtianya 2008-09-22 02:53:33
在类的头文件中:
public:
unsigned int _stdcall StopCollect(void * param);


在实现源代码中:
void CCompanyInformationView::OnCollectInformation()
{
HANDLE hndstop=NULL;
DWORD addr=0;
hndstop=(HANDLE)_beginthreadex(NULL,0,StopCollect,0,0,&addr);

.......
.......

}
unsigned int _stdcall CCompanyInformationView::StopCollect(void * param)
{
m_flag=1;
return 1;
}

编译出现的错误:
E:\dev\src\CompanyInformation\CompanyInformationView.cpp(203) : error C2664: '_beginthreadex' : cannot convert parameter 3 from 'unsigned int (void *)' to 'unsigned int (__stdcall *)(void *)'
None of the functions with this name in scope match the target type
在网上看到过好多类似问题的,但都试过了,都解决不了
希望有高手给点详细的意见

...全文
117 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
编程-鸟人-_-- 2008-09-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 gaoteng1984 的回复:]
引用 8 楼 dulvtianya 的回复:
但是我希望能在按下一个按钮时来结束第一个线程的运行

窗口消息处理函数里添加对该按钮的消除处理,进行某个共享变量的置位。
第一个线程周期检查这个共享变量,发现其置位时,就return自己
[/Quote]

顶!
koko200147 2008-09-26
  • 打赏
  • 举报
回复
可以设置事件来做这些事情吧?
dulvtianya 2008-09-24
  • 打赏
  • 举报
回复
哈哈,有点眉目了,期待更好的答案,谢谢你们的指教
kakashi0309 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dulvtianya 的回复:]
6楼我喜欢你的回答,有没有高手说的再详细点啊,当然也感谢说用static的方法的高手,只是我觉得用全局变量比用静态变量更酷一些
[/Quote]

Cool

强制结束线程可能造成难以预料的结果-TerminateThread()

最好是让线程自己返回
gaoteng1984 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dulvtianya 的回复:]
但是我希望能在按下一个按钮时来结束第一个线程的运行
[/Quote]
窗口消息处理函数里添加对该按钮的消除处理,进行某个共享变量的置位。
第一个线程周期检查这个共享变量,发现其置位时,就return自己
danscort2000 2008-09-22
  • 打赏
  • 举报
回复
线程函数不可以是对象内的函数
必须是独立函数,一般就是全局函数
所以让你把那个类前缀去掉
把函数说明提前,就可以解决了
如果你一定要使用类内说明的静态全局函数
也可以在函数的类中说明前加 STATIC强制为全局函数,然后在这里的实现,去掉类前缀
Can you pick up what I'm putting down?
dulvtianya 2008-09-22
  • 打赏
  • 举报
回复
我发现不能用ON_COMMAND(idcReleaseInformation,StopCollect)消息映射,
但是我希望能在按下一个按钮时来结束第一个线程的运行,高手给说的再详细点吧
dulvtianya 2008-09-22
  • 打赏
  • 举报
回复
6楼我喜欢你的回答,有没有高手说的再详细点啊,当然也感谢说用static的方法的高手,只是我觉得用全局变量比用静态变量更酷一些
danscort2000 2008-09-22
  • 打赏
  • 举报
回复
unsigned int _stdcall CCompanyInformationView::StopCollect(void * param)

去掉 CCompanyInformationView::
然后把说明提前就可以解决了
pangqi022 2008-09-22
  • 打赏
  • 举报
回复
设置停止变量,或者事件,或者....
让线程检测这个信号量
让线程自己退出
dulvtianya 2008-09-22
  • 打赏
  • 举报
回复
我的本意是在一个线程运行时,为了让它停止,而创建的另一个线程来实现,希望用ON_COMMAND(idcReleaseInformation,StopCollect)消息映射来停止开始的线程,我知道涉及到线程间通信问题吧,有点复杂,用消息映射根本不行,高手再给点意见吧,可能我本来思路既有问题。
cnzdgs 2008-09-22
  • 打赏
  • 举报
回复
同上。线程必须是静态函数,把this作为参数传给线程,再在线程函数中把param强制转换为CCompanyInformationView*类型来使用。
wongyeam 2008-09-22
  • 打赏
  • 举报
回复
同意。[Quote=引用 1 楼 unsigned 的回复:]
定义成static方法.
[/Quote]
僵哥 2008-09-22
  • 打赏
  • 举报
回复
定义成static方法.

15,471

社区成员

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

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