⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_45501.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:45501 发表者:tata 发表日期:2003-07-01 09:52:02
<br>主题:急急急!利用线程编制程序
<br>内容:请问高手,我这里需要用线程来遍采集卡采集图形的程序,在OnPaint()函数当中直接处理采集程序还好用,当利用线程时,就出现一堆错误,下面是我利用线程遍的程序,请大侠指教,谢谢啊。<BR>void CTrack3View::OnPaint() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;AfxBeginThread(Process,&amp;(this-&gt;m_hWnd),THREAD_PRIORITY_NORMAL,0);<BR>}<BR>UINT CTrack3View::Process(LPVOID pctl)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CTrack3Doc *p=(CTrack3Doc*)pctl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;MdigControl(p-&gt;MilDigitizer, M_GRAB_MODE, M_ASYNCHRONOUS);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MdigGrab(p-&gt;MilDigitizer, p-&gt;MilImage);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MbufCopy(p-&gt;MilImage,p-&gt;MilImageDisp);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return(0);<BR>}<BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:zbf 回复日期:2003-07-01 14:02:25
<br>内容:线程参数不对,<BR>UINT CTrack3View::Process(LPVOID pctl)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;HWND p=(HWND)pctl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;MdigControl(p-&gt;MilDigitizer, M_GRAB_MODE, M_ASYNCHRONOUS);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MdigGrab(p-&gt;MilDigitizer, p-&gt;MilImage);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MbufCopy(p-&gt;MilImage,p-&gt;MilImageDisp);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return(0);<BR>}<BR>或下面改动<BR>void CTrack3View::OnPaint() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;AfxBeginThread(Process,&amp;(GetDocument()),THREAD_PRIORITY_NORMAL,0);<BR>}<BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tata 回复日期:2003-07-01 18:31:19
<br>内容:谢谢zbf,真的很好用啊 ,对象都是在文档类定义的,我用的是你给我的第二种方法修改的,程序立刻可以连续的采集图象了。万分感谢
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tata 回复日期:2003-07-01 19:08:43
<br>内容:呵呵,我又遇到一个问题,这时我在线程当中调用视图类的成员变量,程序却不认<BR>我在CTrack3view.h当中定义&nbsp;&nbsp;&nbsp;&nbsp;BYTE *object;int aim;之后,给aim 附值,接着在<BR>执行文件当中,<BR>UINT void CTrack3View::OnPaint() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;AfxBeginThread(Process,GetDocument()),THREAD_PRIORITY_NORMAL,0);<BR>}<BR>UINT CTrack3View::Process(LPVOID pctl)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CTrack3Doc *p=(CTrack3Doc*)pctl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;MdigControl(p-&gt;MilDigitizer, M_GRAB_MODE, M_ASYNCHRONOUS);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MdigGrab(p-&gt;MilDigitizer, p-&gt;MilImage);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MbufGet(p-&gt;MilImage,p-&gt;image);<BR>&nbsp;&nbsp;&nbsp;&nbsp;object=aim+p-&gt;image;<BR>&nbsp;&nbsp;&nbsp;&nbsp;MbufPut(p-&gt;MilImage,p-&gt;image);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MbufCopy(p-&gt;MilImage,p-&gt;MilImageDisp);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return(0);<BR>}<BR>这时出现如下错误:不任已经定义好的成员变量aim 和object<BR>F:\wmj\track\track5&nbsp;&nbsp; 多线程\Track3View.cpp(140) : error C2597: illegal reference to data member 'CTrack3View::aim' in a static member function<BR>F:\wmj\track\track5&nbsp;&nbsp; 多线程\Track3View.cpp(140) : error C2597: illegal reference to data member 'CTrack3View::object' in a static member function<BR><BR>请问大侠这是怎么回事啊,不胜感激<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:zbf 回复日期:2003-07-02 09:22:30
<br>内容:类的静态成员函数不能直接访问类的成员变量,你可以把object和aim定义为全局变量,或间接访问类的成员变量,方法如下:<BR>UINT CTrack3View::Process(LPVOID pctl)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp; CTrack3View *pView;<BR>&nbsp;&nbsp;&nbsp;&nbsp; CTrack3Doc *p=(CTrack3Doc*)pctl;<BR>&nbsp;&nbsp;&nbsp;&nbsp; POSITION posView ;<BR>&nbsp;&nbsp;&nbsp;&nbsp; posView=p-&gt;GetFirstViewPosition();<BR>&nbsp;&nbsp;&nbsp;&nbsp; pView=p-&gt;GetNextView(posView);<BR>&nbsp;&nbsp; //现在可以引用object or aim;<BR>&nbsp;&nbsp; pView-&gt;object=pView-&gt;aim+p-&gt;image;<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tata 回复日期:2003-07-02 16:41:41
<br>内容:感谢zbf,我把object 和aim 改成全局变量之后,程序立刻挑通了,心情别提有多舒畅了,真是不知道怎么感觉老兄才好,<BR><BR>只是有个问题只知其然不知所以然,为什么创建线程时,要把线程的指针定义成GetDocument(),而不能直接用(CWnd*)this ?<BR>&nbsp;&nbsp;&nbsp;&nbsp;AfxBeginThread(Process,(GetDocument()),THREAD_PRIORITY_NORMAL,0);<BR><BR>还有,我要在这个线程函数当中调用CPaintDC 函数,以观看图象的处理速度,但在线程中调用函数CPaintDC时,出现"应用程序异常错误unknown software exception (0x80000003),位置为0x77f9f9df",<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>UINT CTrack3View::Process(LPVOID pctl)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPaintDC dc((CWnd*)pctl);<BR>&nbsp;&nbsp;&nbsp;&nbsp;CTrack3Doc *p=(CTrack3Doc*)pctl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;MdigControl(p-&gt;MilDigitizer, M_GRAB_MODE, M_ASYNCHRONOUS);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MdigGrab(p-&gt;MilDigitizer, p-&gt;MilImage);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MbufGet(p-&gt;MilImage,p-&gt;image);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MbufPut(p-&gt;MilImage,p-&gt;image);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MbufCopy(p-&gt;MilImage,p-&gt;MilImageDisp);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return(0);<BR>}<BR>请指教<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:zbf 回复日期:2003-07-03 08:59:48
<br>内容:你在CTrack3View类中启动线程,参数用this,实际参数是CTrack3View自己,而不CTrack3Doc <BR>对象指针,CPaintDC 也是这个错误。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tata 回复日期:2003-07-03 10:30:16
<br>内容:哦,原来是这个样子啊,意思就是说要在线程中调用文挡类的成员,必须在创建线程时,把GetDocument附给Process线程,是这个意思吧?<BR>我这样做之后,调用文挡类的成员果然成功了,可是CPaintDC仍用那个参数却出现错误,<BR><BR>AfxBeginThread(Process,(GetDocument()),THREAD_PRIORITY_NORMAL,0);<BR><BR>UINT CTrack3View::Process(LPVOID pctl)<BR>{<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CTrack3Doc *p=(CTrack3Doc*)pctl; //调用成功<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPaintDC dc((CWnd*)pctl);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//调用失败<BR>&nbsp;&nbsp;&nbsp;&nbsp;return(0);<BR>}<BR>怎么采用让CTrack3Doc 和 CPaintDC 在线程中同时起作用呢?<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -