我想写一个用户界面线程的多线程程序,用一个类继承自CWinThread,有的书上说必须要实例化一个指针,得到AfxBeginThread()返回,但是微软的例子又没有用AfxBeginThread(),到底怎么做啊。CreateThread和AfxBeginThread()之间有什么区别啊??我写的是一个Cdialog的程序,线程只是想一分钟画一个图片,不做其他的什么事情,DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE好象是跟文档有关的,我可不可以不要啊??谢谢了
解决方案 »
- 请问在哪本书中有讲解NMHDR结构及用法的内容?
- 灰度图像获得像素值问题。
- LoadFrame为什么不能设定正确的icon for MainWnd?
- 关于图像拼接的问题
- 请问高手:关于快捷键的问题?
- 请问如下语句是什么意思?就一句,非常简单,请多指教,谢谢!
- 怪怪的问题,有劳大家:对话框程序初始化时用SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE,NULL)最大化主窗体却出现内存溢出?
- dll的导出函数是_function,而应用程序的连接器却要求_imp_function?
- 如何用vc写一个Dll,在Dll中调用另外一个Dll的动态库?
- 一个初学者的问题,是关于控件的
- 求G711协议编解码封装好的C++类库
- 怎么才能让自己的位图粘在QQ军旗游戏上的棋子上。
======================================
动态运行时声明和执行, 通常如果你的类的构造和析构是保护成员, 可在类中自动创建(详见dissecting MFC)CreateThread 是创建界面线程, 与AfxBeginThread不同的是, 它等待消息处理, 详见GetMessage 和
MsgWaitForMultipleObjects
我继承了类,直接实例化一个对象和实例化一个指针得到AfxBeginThread()有什么区别。
AFX_THREADPROC pfnThreadProc,
LPVOID pParam)传入线程函数名字 和 参数就可以了 ,在线程函数中 画完让它自动返回就完了UINT ThreadProc(LPVOID pParam)
{
while (!StopFlag)//要结束StopFlag设置为 TRUE 就可以了
{
}
}
{
while (!StopFlag)//要结束StopFlag设置为 TRUE 就可以了
{
sleep(一定时间);
if(Flag) //暂停时StopFlag设置为 TRUE 就可以了
continue;
}
}
{
public:
MyThread();
virtual BOOL InitInstance();
virtual ~MyThread();};方法全部为空
UINT ThreadFunction( LPVOID pParam )//全局方法
{
gamePlay();//调用需要的方法
Sleep(900);
PIC_Num++;
return 1;
}
m_Thread = (MyThread*)AfxBeginThread(ThreadFunction,(LPVOID)0,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
m_Thread->ResumeThread();
为什么我的ThreadFunction只是在ResumeThread的时候调用了一次啊??
ResumeThread();//开始执行
ON_THREAD_MESSAGE(ON_WM_1,onResponse) ,第一个参数怎么设置,一般设置成什么
{
gamePlay();//调用需要的方法
Sleep(900);
PIC_Num++;
return 1;
}
你的线程函数里没有循环 ,执行一遍就return 了 当然就只执行一次
Sleep(900); 当然拖时间了 都快一秒了 。Sleep可以精确到15ms__________________________________________________________
我做一个游戏,线程拿来计时,1秒钟让一个数字加1,再画一部分上去,这个线程该怎么做啊,我用工作线程,我用空的方法,想一秒调用一次
ON_THREAD_MESSAGE(ON_WM_1,onResponse) ,第一个参数怎么设置,一般设置成什么这种定时做事情的 程序 用OnTimer 最好了 开始的时候
SetTimer(ID_TIMER, 1000, NULL)
OnTimer
{
//
//要做的事情
//
}
完了
KillTimer(ID_TIMER); 就可以了
BEGIN_MESSAGE_MAP(MyThread,CWinThread)
ON_THREAD_MESSAGE(ON_WM_1,onResponse)
END_MESSAGE_MAP()
void MyThread::onResponse(WPARAM wParam, LPARAM lParam)
{
while(true)
{
gamePlay();
PIC_Num++;
}
}
这样写了还是只执行一次
AfxBeginThread(ThreadFunction,(LPVOID)0,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
ThreadFunction才是执行的,在这个里面写while(true).忙了半天,写错了。结帖,给分。
ON_THREAD_MESSAGE(ON_WM_1,onResponse)映射线程消息和他的处理函数,这个一般拿来做什么啊