关于MFC中多线程问题 50

现在有1个计算量大的计算和文件读写需要使用线程。环境采用的vc6.0的MFC框架。我试过staticDWORDWINAPIThreadProc(LPVOIDlpParam... 现在有1个计算量大的计算和文件读写需要使用线程。
环境采用的vc6.0的MFC框架。
我试过static DWORD WINAPI ThreadProc(LPVOID lpParameter);
由于计算中需要使用某个链接库函数,使用此链接库需要初始化一个对象,初始化过程在对话框生成的时候就完成。现在,在ThreadProc中调用链接库函数就会报错,并且我试过传对象指针、将对象设为全局变量也报错。错误是链接库函数报出来的,我也不知道什么原因。如果把链接库函数放到主线程里调用则没有错误。
我想解决的问题是:由于运算量大,不采用线程的话,运算过程中,对话框将会失去响应,我想保证在运算过程中对话框按钮也能响应。
大家有没有办法解决下?或者说,有没有别的办法实现?比如说能不能把运算放到主线程,把对话框响应过程放到创建的线程里呢?
谢谢了。
//a.h
#include "googleearth.h"
class CGEDlg : public CDialog
{
static DWORD WINAPI ThreadProc(LPVOID lpParameter);
}
//a.cpp
IApplicationGE m_geApplication;
double m_dLongitudeDif;
double m_dLatitudeDif;
void CGEDlg::OnInitDialog()
{
COleException * pError=NULL;
CString lpError;
if (!m_geApplication.CreateDispatch(CLSID_ApplicationGE,pError))
{
MessageBox("引用失败!");
pError->GetErrorMessage(lpError.GetBuffer(0),MAX_PATH);
MessageBox(lpError);
exit(0);
}
m_geHWnd=(HWND)m_geApplication.GetMainHwnd();
}
void CGEDlg::OnBTRun()
{
HANDLE hThread=CreateThread(NULL,0,ThreadProc,this,0,NULL);
CloseHandle(hThread);
}
DWORD WINAPI CGEDlg::ThreadProc(LPVOID lpParameter)
{
m_geApplication.GetPointOnTerrainFromScreenCoords(-1,-1);
return 0;
//m_geApplication.GetPointOnTerrainFromScreenCoords(-1,-1);报错,报runtime error.
}
(CGEDlg*)lpParameter传递指针的方法也试过,一样runtime error
展开
 我来答
gww1bd
2010-08-16 · TA获得超过303个赞
知道小有建树答主
回答量:154
采纳率:0%
帮助的人:0
展开全部
是哪个库函数调用出错?

访问全局变量、读写文件,你做了线程之间同步互斥吗?

可以用MsgWaitForMultipleObjects等待线程完成运算,而且不阻塞消息循环。

能编译链接通过应该跟编译选项没关系了。

但是有个问题:
GetPointOnTerrainFromScreenCoords的VC版本应该有3个参数才对呀,只有2个参数那是c#和VB的用法。

下面是VC的声明:

HRESULT GetPointOnTerrainFromScreenCoords ([in] double screen_x,[in] double screen_y,[out, retval] IPointOnTerrainGE **pPoint)
msfocus0314
2010-08-16 · TA获得超过291个赞
知道小有建树答主
回答量:392
采纳率:0%
帮助的人:302万
展开全部
调整一下编译选项,选择多线程动态库支持

(CGEDlg*)lpParameter->m_geApplication...

遇到过这种问题,是msvcrt库升在windows级到sp1后造成的,当时我的解决办法就是静态编译,没别的方法了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c58929f
2010-08-17 · 超过22用户采纳过TA的回答
知道答主
回答量:100
采纳率:0%
帮助的人:84.9万
展开全部
多线程,计算过程为全局的东西,怎么可能会报错呢?CreateInstance,然后在ThreadProc响应,其中的所有变量都是全局的,假如与主线程有共用的变量,用CMutex的Lock,UnLock完全可以同步,使用多线程至今未出错,请将错误提示贴出,我也好学习下
实时错误,应该是工程设置问题,同意msfocus0314 观点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式