创建线程问题。
我用
m_haThread=CreateThread(NULL,0,MyDo,&m_a,0,&ThreadID);
为什么有错误?????请教。
问题点数:50、回复次数:8Top
1 楼ruihuahan(飞不起来的笨鸟)回复于 2002-12-10 14:13:56 得分 5
什么错误?注意线程函数有固定的格式。Top
2 楼ccck1111(如风)回复于 2002-12-10 14:59:23 得分 10
HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId);
这是原型,具体见MSDNTop
3 楼seeclear(看得清楚)回复于 2002-12-10 15:31:52 得分 5
至少把错误提示贴出来,大家才好分析嘛。Top
4 楼alanyanyi(张浩南)回复于 2002-12-10 16:50:36 得分 0
我的语句
m_hGreenThread=CreateThread(NULL,0,BallMove,m_GreenBall,0,&ThreadID);
Compiling...
moveDlg.cpp
C:\Documents and Settings\Administrator\My Documents\study\move\moveDlg.cpp(238) : error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'
None of the functions with this name in scope match the target type
Error executing cl.exe.
move.exe - 1 error(s), 0 warning(s)
我自己的函数是 DWORD WINAPI CMoveDlg::BallMove(LPVOID lpparameter)
怎么办?什么错误?Top
5 楼alanyanyi(张浩南)回复于 2002-12-10 16:59:24 得分 0
我是在 WIN2000下,有影响吗?Top
6 楼yamei2000(闭关中)回复于 2002-12-10 18:38:38 得分 30
1.CMoveDlg::BallMove(LPVOID lpparameter)换成:
BallMove(LPVOID lpparameter)的情态函数;
class CMoveDlg
{
static void BallMove(LPVOID lpparameter);
}
2.m_hGreenThread=CreateThread(NULL,0,BallMove,m_GreenBall,0,&ThreadID);换为:
m_hGreenThread=AfxBeginThread(NULL,0,BallMove,m_GreenBall,0,&ThreadID);Top
7 楼alanyanyi(张浩南)回复于 2002-12-10 22:40:50 得分 0
谢谢 ,我改过来了。
但是,是没有错误了。为什么我在执行的时候,看不到BallMove执行呢?Top
8 楼yamei2000(闭关中)回复于 2002-12-11 18:05:45 得分 0
你把m_hGreenThread=AfxBeginThread(NULL,0,BallMove,m_GreenBall,0,&ThreadID);改为:
m_hGreenThread=AfxBeginThread(BallMove,m_GreenBall,0,&ThreadID);
然后在函数BallMove()处设置断点,然后按F5,AA接着按F11一步步操作,应该能看的到它在执行着,呵呵Top





