问一个有意思的问题,期望高手给解决方案*************************

god_sun 2007-11-23 02:53:32
我单文档程序,点击某乡菜单有个功能:
从excel读取文件导入数据库,现在记录有9k多条。
我执行程序的时候。 导入过程中,程序显示无响应(出现在标题旁边,但是程序还在执行,估计cpu轮转不过来)。等9k记录导入完后,又好了


请问导入的过程中,怎么让他平静的执行,不要出现什么无响应 。
...全文
167 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
god_sun 2007-11-23
  • 打赏
  • 举报
回复
好的。谢谢。。
ps 我用ado读取的。呵呵。不知道好不好
因为我链接数据库也是用ado的。所以读excel就已启用
shakaqrj 2007-11-23
  • 打赏
  • 举报
回复
文件夹下如果有excel的文件,里面有9k行数据,我要读到数据库里。读完在继续读其他文件
---------------------------------------------------------------------
你可以在网上搜一下如何把excel倒入到相应的数据库
这样会更快,快一大截
hljalong 2007-11-23
  • 打赏
  • 举报
回复
你可以你贴出来的都放到一个新线程去运行,主线程等待它返回执行完毕的消息,以免没处理完主线程被结束掉就行了。这样只是为了主线程还有响应。
shakaqrj 2007-11-23
  • 打赏
  • 举报
回复
不要这样啊
开线程主要是为了防止阻塞消息队列,表现为程序运行中窗口的对消息的不响应等等
你把导入的全过程,都放入一个线程中
不是同时多线程让你读文件(事实上这样不一定快),而是开个工作线程进行这一系列操作,
god_sun 2007-11-23
  • 打赏
  • 举报
回复
不要waitforsigleobject。
等待的话,又阻塞了。
线程执行完后发消息
------------------------------
做个全局变量,读完设置成true?可以么?
god_sun 2007-11-23
  • 打赏
  • 举报
回复
从excel读取文件导入数据库
这是什么意思??
依次读取文件不行吗?

--------------------------------
文件夹下如果有excel的文件,里面有9k行数据,我要读到数据库里。读完在继续读其他文件
god_sun 2007-11-23
  • 打赏
  • 举报
回复

CFileFind ff;
CString filePath;
CString fileName;
if(szDir.Right(1) != "\\")
szDir += "\\";
szDir += "*.*";

BOOL res = ff.FindFile (szDir);
while (res)
{
res = ff.FindNextFile();
filePath = ff.GetFilePath();
if(ff.IsDirectory() && !ff.IsDots())
{
continue;
}
else if(!ff.IsDirectory() && !ff.IsDots())
{
fileName = ff.GetFileName ();
if (fileName.Right(3) == "xls")
{
//这里创建线程读取9k条数据
}
else
{ // 处理其他数据
}
}
}


我有点不懂了。。我创建线程的时候,程序只是另开一个线程执行操作。但是主程序还是会继续往下执行吧~
shakaqrj 2007-11-23
  • 打赏
  • 举报
回复
从excel读取文件导入数据库
这是什么意思??
依次读取文件不行吗?
ouyh12345 2007-11-23
  • 打赏
  • 举报
回复
不要waitforsigleobject。
等待的话,又阻塞了。
线程执行完后发消息
god_sun 2007-11-23
  • 打赏
  • 举报
回复
再问一个:
我用过线程。但是不是很熟悉。
现在问题。我读取这个文件后还要读其他的文件,这个文件要先读.

是不是在读其他文件之前先waitforsigleobject 等这个线程执行完了在运行?
shakaqrj 2007-11-23
  • 打赏
  • 举报
回复
应该没问题
shakaqrj 2007-11-23
  • 打赏
  • 举报
回复
en
其实很简单的
AfxBeginThread(MyThreadProc,0,THREAD_PRIORITY_BELOW_NORMAL);
全局函数
UINT MyThreadProc( LPVOID pParam )
{
...
return 0; // thread completed successfully
}
god_sun 2007-11-23
  • 打赏
  • 举报
回复
读数据和导入在一个新线程一起执行好吗?
god_sun 2007-11-23
  • 打赏
  • 举报
回复
你是说我点击这个事件时候再创建一个线程来执行这个吗?
shakaqrj 2007-11-23
  • 打赏
  • 举报
回复
同楼上,多线程
前些时候有过类似问题
davyaxl 2007-11-23
  • 打赏
  • 举报
回复
恩,开个线程负责读数据就行了
ouyh12345 2007-11-23
  • 打赏
  • 举报
回复
多线程

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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