生成线程的程序能放到类里去定义吗?
以下是模拟的代码:
Dword CAlarm::Excution(LPDWORD param) //线程的执行函数
{
if (nRunning)
{
Beep(450, 150);
}
return 1;
}BOOL Calarm::StartThread() //创建线程
{
HANDLE hThread;
HThread = CreateTread(0, 0,
(LPTHREAD_START_ROUTINE)Excution,
0, 0, &id);
}在编译时通不过,提示找不到Excution函数。据说可以在Dword CAlarm::Excution(LPDWORD param)加上static让其成为静态函数,我试过了,也是不行的。请大侠指点一二!
以下是模拟的代码:
Dword CAlarm::Excution(LPDWORD param) //线程的执行函数
{
if (nRunning)
{
Beep(450, 150);
}
return 1;
}BOOL Calarm::StartThread() //创建线程
{
HANDLE hThread;
HThread = CreateTread(0, 0,
(LPTHREAD_START_ROUTINE)Excution,
0, 0, &id);
}在编译时通不过,提示找不到Excution函数。据说可以在Dword CAlarm::Excution(LPDWORD param)加上static让其成为静态函数,我试过了,也是不行的。请大侠指点一二!
解决方案 »
- 为青海玉树7.1级地震灾区同胞祈祷
- CToolTipCtrl 能不能显示空白处的信息
- ado 存储过程 CreateParameter 拒绝访问
- 文本框,按钮这些有句柄的控件是不是都属于窗口呀,象标签这种没有句柄的控件,是不是不属于窗口呀.?
- 如何根据窗口句柄得到进程的ID?!
- 请问有没有函数可以将域名转换成IP?
- 高分请教 dll 问题?分不够可再加!!!(在线等待)
- 串口通讯基础问题,欢迎大家参与
- 高薪急聘!!研发工程师、维护服务工程师(西安、成都、上海),08年10月31号前有效
- 我是一个比较名牌的大学的计算机本科大3的学生,我很迷茫,请各位指明方向。
- VC6是不是不支持偏特化(partial Specialization)?
- 在一个文档视的程序里面,怎样在一个自己定义的对话框里面得到文档的数据?
把加了static之后的出错信息贴出来。
http://expert.csdn.net/Expert/TopicView1.asp?id=1376518
class CAlarm
{
public:
static Dword Execution(LPDWORD param) //线程的执行函数
....
};
及实现函数中这样定义:static Dword CAlarm::Execution(LPDWORD param)
{
...
}
编译时提示:error C2724: 'Execution' : 'static' should not be used on member functions defined at file scope问题2:
如果如下定义:
class CAlarm
{
public:
static Dword Execution(LPDWORD param) //线程的执行函数
....
};
及实现函数中这样定义:Dword CAlarm::Execution(LPDWORD param) //注意,这里没加static!
{
CAlarm * This = (CAlarm *) param;
if(This == NULL)
{
return 0;
}
else
{
...
}
}那么编译都没问题,但是每次执行时,This总是等于NULL,这是为何?
{
HANDLE hThread;
HThread = CreateTread(0, 0,
(LPTHREAD_START_ROUTINE)Excution,
this, 0, &id); //注意第四个参数,用了this指针
}
(LPTHREAD_START_ROUTINE)Excution,
0, 0, &id);
change to :
HThread = CreateTread(0, 0,
(LPTHREAD_START_ROUTINE)Excution,
this, 0, &id);
try it again;
修饰万一改变编译设定才不会出错!