100分求助,请前辈高手们帮我解决一个小问题。在辅助线程中采集数据遇到的。

tjucruiser 2006-10-09 09:13:56
问题如下:以1000HZ的采样率采集数据,每次保证采集10ms数据,10次采样数据连续存放,结果正常取数一次之后,会随机的发生几次不能正常

取数,而后又能取到数据。

看了一下提供的demo,发现有这样一个情况,程序中的辅助线程(负责取数),取完100次之后,直接调用绘图函数,也就是绘图操作也在辅助

线程占用时间内,请问这是不是导致丢数的原因,辅助线程代码如下:
UINT Thread_IO_InData(LPVOID pParam)
{

......
if(!ReadData(gm_hDevice,&gm_pBuffer[0],&gm_nCounts))
......
DrawMap();//画图函数放在线程内部,这会不会有问题!!!!????
......
}

...全文
185 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjucruiser 2006-10-16
  • 打赏
  • 举报
回复
请问我想把原先别人提供的DLL包在我自己的DLL中,做成后的DLL提供给其他程序调用,请问可以实现吗?
gaopl_8278 2006-10-10
  • 打赏
  • 举报
回复
首先打开VC开发环境,然后CTRL+N,选择"工程"选项卡下面的"MFC AppWizard [dll]",输入工程名,并选择好路径点"OK".进入下一步后有三种选择:第一种是建立一个静态的DLL(当你的应用程序编译时就会把DLL中的代码加到程序中,使你的应用程序体积变大),第二种是建立立一个常规的动态的DLL(当你发布应用程序时需要提供你的DLL),第三种是MFC的扩充DLL(也是动态的),这种DLL只能支持MFC,如果你是用MFC来开发的话,就选第三种,这是最常用的.如果你用其它开发环境的话,就不要用第三种,不支持.下来我就为你写一个简单的DLL,我选的是第三种.
在刚才创建的工程中按CTRL+N,选择"文件(Files)"选项卡,选择"C/C++ Header File",在右上角有一个复选框"Add to project:",确保选中它(会自动把下面创建的文件加到工程中),在"File"的下面输入你要创建的文件名(比如dll),点"OK".在创建好的dll.h中输入如下语句:
extern "C" __declspec(dllexport) int fun(int x1,int x2,int x3);
和创建dll.h类似,CTRL+N,选择C++ Source File,File 中输入dll,点"OK".在创建的dll.cpp中输入如下语句:
#include "stdafx.h"
#include "dll.h"
extern "C" __declspec(dllexport) int fun(int x1,int x2,int x3)
{
return x1+x2+x3;
}
编译生成mydll.dll和mydll.lib.
说明:以上的int fun(int x1,int x2,int x3)函数你可以按自己的要求写,就这个格式,怎么实现你的功能由你来决定.
最后,打开你需要引用这个dll的工程,把mydll.dll拷贝到你的工程目录的debug\下,把mydll.lib拷贝到你的工程目录下.拷贝完后,在你的工程的cpp源文件的#endif后面添加下列语句:[如果这样不行的话,可以这样连接,点"工程"->"设置"->"连接"->在"对象/库模块"中输入你的mydll.lib文件的全路径,注意mydll.dll一定拷贝到debug\下(或者是release\下)]
extern "C" __declspec(dllimport) int fun(int x1,int x2,int x3);
之后,你就可以像你自己在工程中建立的函数一样引用int fun(int x1,int x2,int x3)这个函数了.比如:
int x=fun(1,2,3);
就会把三个数的和赋给x了.
以上函数名和工程名纯属虚构,使用时请用你自己的.
tjucruiser 2006-10-10
  • 打赏
  • 举报
回复
前辈,我以前没有做过将MFC工程变成DLL,能给我个例子吗?
tjucruiser 2006-10-09
  • 打赏
  • 举报
回复
"1000hz就是每1ms采样一次。你每次采样要花10ms,两次采样之间不会打架嘛?"
什么意思,这是硬件采样啊,采完它就放到硬件缓冲中了,不明白您什么意思????!!
templarzq 2006-10-09
  • 打赏
  • 举报
回复
1000hz就是每1ms采样一次。你每次采样要花10ms,两次采样之间不会打架嘛?多线程的话要做好互斥的处理
DentistryDoctor 2006-10-09
  • 打赏
  • 举报
回复
接调用绘图函数,也就是绘图操作也在辅助?
GDI操作最好交由主线程来完成。
syy64 2006-10-09
  • 打赏
  • 举报
回复
DLL只是一个模快,它一般是没有界面的,你只能将它加载到你的应用工程中才可使用。
碧螺春的马甲 2006-10-09
  • 打赏
  • 举报
回复
楼上,是的。
做好DLL后,最好有个Demo的工程给别人看。

楼主的东西 绘图应该在 界面线程完成,可以发个消息出来,并做好同步。
tjucruiser 2006-10-09
  • 打赏
  • 举报
回复
我想问个别的问题,请高手指点我啊。解决就结帖!多谢了啊!

我原来做了一个采集数据和显示的工程,调试生成EXE文件,运行良好。现在想把他做成DLL文件,让其他工程调用,请问该怎么作? 是不是还要另外做一个测试工程,调用这个DLL,才能看结果如何呢?

15,471

社区成员

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

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