从PCI上读取数据 线程和定时器效率

简介: <p>从PCI上读取数据 线程和定时器效率</p> <p>线程:</p> <p> mythread=AfxBeginThread(StartContinuous,(LPVOID)1,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);<br>  mythread->ResumeThread();</p> <p>UINT StartContin

从PCI上读取数据 线程和定时器效率

线程:

 mythread=AfxBeginThread(StartContinuous,(LPVOID)1,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
 mythread->ResumeThread();

UINT StartContinuous(LPVOID pParam)
{ HWND hWnd=(HWND) pParam;
 int len=0;
 FILE *fp;

 i=0;
 while(threadenable)
 {

  len = CPCI6312_ReadData(buf);
  if (len>0)
  {  
   reccnt += len;
   fwrite(buf,1,len,fp);
  }
 }

 len = CPCI6312_ReadLastData(buf);
 if (len>0)
 {
  reccnt += len;
  fwrite(buf,1,len,fp);
 }
 fflush(fp);
 fclose(fp);
 AfxMessageBox("end",MB_OK,NULL);

 return 0;
}

计数器方式:

void CDemo2Dlg::OnTimer(UINT nIDEvent)
{
 // TODO: Add your message handler code here and/or call default
 if(nIDEvent==1)//更新记录数据
 {
  runsec++;
  str.Format("record:%d (%d)",reccnt,runsec);
  m_list.AddString(str);
 }
 

 if (nIDEvent==2)//采集数据
 {
  len = CPCI6312_ReadData(buf);
  if (len>0)
  {  
   reccnt += len;
   fwrite(buf,1,len,fp);
  }
 }
 CDialog::OnTimer(nIDEvent);
}

同样的数据量,线程方式居然占用CPU 80% 以上,而计数器不到30%。

 

相关文章
|
2月前
|
消息中间件 监控 安全
服务Down机了,线程池中的数据如何保证不丢失?
在分布式系统与高并发应用开发中,服务的稳定性和数据的持久性是两个至关重要的考量点。当服务遭遇Down机时,如何确保线程池中处理的数据不丢失,是每一位开发者都需要深入思考的问题。以下,我将从几个关键方面分享如何在这种情况下保障数据的安全与完整性。
62 2
|
24天前
|
缓存 安全 Java
使用 Java 内存模型解决多线程中的数据竞争问题
【10月更文挑战第11天】在 Java 多线程编程中,数据竞争是一个常见问题。通过使用 `synchronized` 关键字、`volatile` 关键字、原子类、显式锁、避免共享可变数据、合理设计数据结构、遵循线程安全原则和使用线程池等方法,可以有效解决数据竞争问题,确保程序的正确性和稳定性。
33 2
|
6月前
|
安全 Java
Java多线程基础-10:代码案例之定时器(一)
`Timer` 是 Java 中的一个定时器类,用于在指定延迟后执行指定的任务。它常用于实现定时任务,例如在网络通信中设置超时或定期清理数据。`Timer` 的核心方法是 `schedule()`,它可以安排任务在延迟一段时间后执行。`
131 1
|
1月前
|
安全 Java
【多线程-从零开始-拾】Timer-定时器
【多线程-从零开始-拾】Timer-定时器
28 0
|
2月前
|
消息中间件 存储 Java
服务重启了,如何保证线程池中的数据不丢失?
【8月更文挑战第30天】为确保服务重启时线程池数据不丢失,可采用数据持久化(如数据库或文件存储)、使用可靠的任务队列(如消息队列或分布式任务队列系统)、状态监测与恢复机制,以及分布式锁等方式。这些方法能有效提高系统稳定性和可靠性,需根据具体需求选择合适方案并进行测试优化。
178 5
|
3月前
处理串口线程数据的函数
【8月更文挑战第4天】处理串口线程数据的函数。
27 4
|
3月前
|
数据采集 Java Python
python 递归锁、信号量、事件、线程队列、进程池和线程池、回调函数、定时器
python 递归锁、信号量、事件、线程队列、进程池和线程池、回调函数、定时器
|
3月前
|
数据处理 Python
解锁Python多线程编程魔法,告别漫长等待!让数据下载如飞,感受科技带来的速度与激情!
【8月更文挑战第22天】Python以简洁的语法和强大的库支持在多个领域大放异彩。尽管存在全局解释器锁(GIL),Python仍提供多线程支持,尤其适用于I/O密集型任务。通过一个多线程下载数据的例子,展示了如何使用`threading`模块创建多线程程序,并与单线程版本进行了性能对比。实验表明,多线程能显著减少总等待时间,但在CPU密集型任务上GIL可能会限制其性能提升。此案例帮助理解Python多线程的优势及其适用场景。
38 0
|
3月前
|
NoSQL Redis
Lettuce的特性和内部实现问题之在同步调用模式下,业务线程是如何拿到结果数据的
Lettuce的特性和内部实现问题之在同步调用模式下,业务线程是如何拿到结果数据的
|
5月前
|
存储 测试技术
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
54 0
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试