小弟是在MFC编写的
void CTry3Dlg::OnButton3()
{
hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc,NULL,0,NULL);
}
单步调试直接跳过该函数,无法进入该线程,请问是怎么回事啊?
顺便请教一下,小弟做一个摄像头的调用,要求单击一个按钮之后,摄像头的图像一直显示在picture控件上,程序倒是完成了。但是其他键无法单击,就是说图像是可以显示,但是程序假死了,单击之后过一会就报错小弟猜测是不是因为显示函数是死循环的原因,于是就想用多线程来做不知道思路对不对,请各位前辈速救啊!
void CTry3Dlg::OnButton3()
{
hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc,NULL,0,NULL);
}
单步调试直接跳过该函数,无法进入该线程,请问是怎么回事啊?
顺便请教一下,小弟做一个摄像头的调用,要求单击一个按钮之后,摄像头的图像一直显示在picture控件上,程序倒是完成了。但是其他键无法单击,就是说图像是可以显示,但是程序假死了,单击之后过一会就报错小弟猜测是不是因为显示函数是死循环的原因,于是就想用多线程来做不知道思路对不对,请各位前辈速救啊!
void ThreadFunc()
{
int j;
CvCapture* capture;
unsigned char **R,**G,**B;
capture=cvCreateCameraCapture(0);
assert(capture!=NULL);
//IplImage* frame;
while (m_bRun)
{
TheImage=cvQueryFrame(capture);
}
}
DWORD WINAPI ThreadProc(
__in LPVOID lpParameter
);
另外你写的是MFC程序,用AfxBeginThread来创建线程,线程函数为这样的
UINT __cdecl ThreadProc(LPVOID lParam)
{
return 0;
}
定义为全局函数或者类的静态成员函数即可
别告诉我你在CreateThread做的断点
void CTry3Dlg::OnButton3()
{
CWinThread *pThread=AfxBeginThread(ThreadFunc);
}
UINT __cdecl ThreadFunc()
{
int j;
CvCapture* capture;
unsigned char **R,**G,**B;
capture=cvCreateCameraCapture(0);
assert(capture!=NULL);
//IplImage* frame;
while (m_bRun)
{
TheImage=cvQueryFrame(capture);
}
return0;
}
{
public:
CTry3Dlg();
virtual ~CTry3Dlg();
private:
static UINT ThreadFunc(LPVOID lparam);
......
}void CTry3Dlg::OnButton3()
{
AfxBeginThread(ThreadFunc,this);
}UINT CTry3Dlg::ThreadFunc(LPVOID lparam)
{
int j;
CvCapture* capture;
unsigned char **R,**G,**B;
capture=cvCreateCameraCapture(0);
assert(capture!=NULL);
//IplImage* frame;
while (m_bRun)
{
TheImage=cvQueryFrame(capture);
}
return0;
}
AfxBeginThread(ThreadFunc,this);此函数里面的线程函数可以是全局的吗?
是全局的话怎么写?
比较详细。