一个接收数据并时时显示的程序,由于接收原始数据利用到循环,所以采用多线程。由于在image上画线,涉及到线程同步问题,所以用wmcopydata发消息方式,保证数据访问的唯一性。一个程序主线程a用来在image上画线,线程b用来接收原始数据,并以wmcopydata的方式把大约50m的数据,大约每隔1秒发消息给主线程a,a收到后,进行数据分析,把数据以bmp图像方式处理成内存流,并用image.loadfromstream的方式在image上显示出来,在收到一定数据后,会先在事先生成的bitmap上画线,再一次贴到image上。现在遇到一个奇怪的问题:在显示属性为32色的情况下,程序运行正常,显示数据和画线过程正常;但在显示属性为增强16色或256色的情况的下,程序运行时,显示数据时正常,但在画线时明显看到image上出现画线过程缓慢,本来发一次消息时间内完全可以画完的线,画完占用了2,3次消息的时间,造成消息丢失的情况,这是怎么回事?难道是线程同步问题?但为什么32色可以,16色不行呢?
解决方案 »
- 三年没上Delphi模块了,上来看看,顺便散点分
- 什么是.udl文件?
- 关于《Delphi Win32核心API参考》中的问题
- 如何获取对AdoTable中数据所做修改的SQL语句?
- 动态创建的TButton如何写它的单击事件以及调用?
- 请问:运行时出现找不到文件System.pas,运行不了程序,不知该怎么办?
- 大家进来看看,我写了一个简单的带一个参数的存储过程,现在要用ADOStoredProc调用这个过程
- 急!!请问什么地方有下载installshield 6.3东方语言包?
- 如何用indy中的组件IDTCPSEVER和IDCLIENT实现多线程通信转发!
- 如何打包含有interbase数据库的程序,用IS
- Delphi7中启动scktsrvr.exe时出现“Can't create new socket”,怎么解决?
- 请指教??
,所以降低速度。
---
以上是我的看法,如有不对的地方请多多指教~~
image1.Canvas.Lock;
try
image1.Canvas.............
finally
image1.Canvas.Unlock;
end;
至于为什么第一次运行此句时占用这么多时间,不懂为什么在16-256情况下慢?要进行移位查找调色板肯定慢