VC 线程显示进度条

zhoucui168 2008-03-27 10:26:20
我没有用过线程,所以希望各位大虾能给个详细的例子。
我现在要保存10张图片到数据库,这需要一定的时间,为了不至于像死机,我想用一个进度条显示进度。网上介绍这得开一个辅线程,可是我从来没有用过线程,所以……
网上介绍的方法如下:
对话框的头文件中:
#define YOURMESSAGE WM_USER +1

在//}}AFX——
与DECLARE——MESSAGE——MAP()
之间加上
afx_msg LRESULT OnYourMessage(WPARAM wParam ,LPARAM lParam);

然后在CPP中:
在BEGIN——MESSAGE_MAP()
中的//}}AFX_MSG_MAP
与EMD_MESSAGE_MAP()之间加上
ON_MESSAGE(YOURMESSAGE,OnYourMessage)
然后定义OnYourMessage()

然后就可以在你的线程中POSTMESSAGE()了

请问“在你的线程中POSTMESSAGE()了”是怎么使用呢?OnYourMessage()函数里的代码写什么呢?

反正我是一点也不会,希望各位多多指教,不要嫌我笨。
...全文
109 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoucui168 2008-04-07
  • 打赏
  • 举报
回复
谢谢大家,问题已解决!
xkyx_cn 2008-03-27
  • 打赏
  • 举报
回复
刚才线程函数的参数写错了,应该是:

// 声明
static void threadfunc(LPVOID lParam);

// 实现
void threadfunc(LPVOID lParam)
{
}


楼上的几位都说的很对,确实有很多东西需要去学,多查查MSDN、上网找资料,学起来还是很快的
xkyx_cn 2008-03-27
  • 打赏
  • 举报
回复
下面只说了个大概方法,希望能抛砖引玉,详细的函数说明lz还是从MSDN里去查吧


// 线程函数声明:在主窗口类的头文件里
static void threadfunc(LPARAM lParam);

// 创建线程:
DWORD dwThreadID;
CreateThread(NULL, NULL, &threadfunc, this, 0, &dwThreadID);

OnYourMessage(WPARAM wParam, LPARAM lParam)
{
int ndata = (int)lParam;
// 这里就可以用ndata 接收到的数据去更新进度条了
}

void threadfunc(LPARAM lParam)
{
// 线程函数里面: CMainWnd是主窗口类
CMainWnd *pwnd = (CMainWnd *)lParam;
// ndata 是要传给主窗口类的数据,比如说进度等等
int ndata = 1;
PostMessage(pwnd->GetSafeHwnd(), YOURMESSAGE, 0, (LPARAM)ndata);
}
kingstarer 2008-03-27
  • 打赏
  • 举报
回复
DWORD WINAPI demo(LPVOID lp)
{
return 0;
}
OnYourMessage()
{
DWORD nID;
CreateThread(NULL, 0, demo_next, (LPVOID *)this, 0, &nID);
//CreateThread用法可参照msdn或百度
}
ouyh12345 2008-03-27
  • 打赏
  • 举报
回复
1、向线程传入对话框的句柄或指针,PostMessage需要它
2、发送消息时,带上相应的进度
3、在消息处理函数里,改变进度条
zaodt 2008-03-27
  • 打赏
  • 举报
回复

一般的方法:

1、保存工作放到后台线程中;

2、界面显示放到主线程中。


具体的,一定要看书,这里根本说不清楚。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧