用了VFP这么久,突然发现一个有趣的问题。

十豆三 2014-05-11 02:22:01
将以下代码粘贴到一个PRG文件中并运行
Public oform1

oform1=Newobject("form1")
oform1.Show
Return

Define Class form1 As Form

Top = 29
Left = 124
Height = 183
Width = 377
DoCreate = .T.
Caption = "Form1"
Name = "Form1"

Add Object timer1 As Timer With ;
Top = 12, ;
Left = 12, ;
Height = 23, ;
Width = 23, ;
Interval = 500, ;
Name = "Timer1"

Add Object label1 As Label With ;
AutoSize = .F., ;
FontSize = 16, ;
Caption = "Label1", ;
Height = 36, ;
Left = 56, ;
Top = 12, ;
Width = 252, ;
ForeColor = Rgb(0,0,255), ;
Name = "Label1"

Add Object combo1 As ComboBox With ;
RowSourceType = 1, ;
RowSource = "1,2,3,4,5,6,7,8,9,0,a,b,c,d,e,f,g,h", ;
Height = 24, ;
Left = 252, ;
Top = 60, ;
Width = 100, ;
Name = "Combo1"

Add Object list1 As ListBox With ;
RowSourceType = 1, ;
RowSource = "1,2,3,4,5,6,7,8,9,0,a,b,c,d,e,f,g,h", ;
Height = 72, ;
Left = 144, ;
Top = 60, ;
Width = 100, ;
Name = "List1"

Procedure timer1.Timer
Thisform.Label1.Caption=Ttoc(Datetime())
Endproc

Enddefine

运行后界面如下:

左边的 Image 是个 Gif 动画,你们可以随意找一个 Gif 动画图片。
表单上用一个 Timer 控件显示时间,另外有一个 Combobox 和 ListBox。
有趣的问题来了,当你按住鼠标左键拖动 Combobox 或 ListBox 或 VFP 的 Command 窗口的滚动条时(下图蓝色框),
你会发现时间不动了,Gif 动画也停止了(下图黄色框),你松开鼠标左键后时间和Gif恢复动态。

说明拖动 VFP 的滚动条(Grid控件的滚动条也是这样,估计VFP的带滚动条的控件都一样)会影响 Timer 控件,不对,是影响整个进程了,因为 Gif 动画也不动了。
此问题说小也小,说大也大。
说小是可以忽略此问题。
说大此问题确实影响实际应用了,最近在做一个读卡的程序时,用 Timer 控件每秒通过MsComm32控件读卡,此问题会把程序卡死几秒钟,最后通过2个EXE才解决了此问题。

此问题
是BUG?
还是VFP单线程的问题,特点?
还是。。。
希望大家讨论一下。
...全文
1271 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
bhyysjh 2015-02-27
  • 打赏
  • 举报
回复
不对,我说错了。对不起
bhyysjh 2015-02-27
  • 打赏
  • 举报
回复
把显示时间的控件: timer , label 放到 Container 控件里就OK了
o0风箫吟0o 2014-08-22
  • 打赏
  • 举报
回复
讨厌的单线程。
捧剑者 2014-06-04
  • 打赏
  • 举报
回复
单线程。。。。。
功克 2014-05-21
  • 打赏
  • 举报
回复
单线程问题吧
rosion 2014-05-21
  • 打赏
  • 举报
回复
单线程问题 。 有时弄进度条时,如果程序计算耗CPU,进度条就会停止响应。
aabiao 2014-05-18
  • 打赏
  • 举报
回复
还真的有这事呀! 以前一直没注意到。 我试了一下,VB6没这问题,点住滚动条,定时器照样工作。
十豆三 2014-05-18
  • 打赏
  • 举报
回复
看来不是BUG,是做不到点住滚动条时定时器正常工作,也就是单线程的问题。
jack_wang0823 2014-05-13
  • 打赏
  • 举报
回复
单线程问题...
都市夜猫 2014-05-13
  • 打赏
  • 举报
回复
毫无疑问是单线程的问题
xilaianzxsc 2014-05-12
  • 打赏
  • 举报
回复
我很想参加讨论的,只是水平有限......
yrt888 2014-05-12
  • 打赏
  • 举报
回复
引用 3 楼 apple_8180 的回复:
[quote=引用 2 楼 yrt888 的回复:] 不知论坛抽风还是我的宽带抽风,来论坛真是艰难!
是打开慢?还是什么?[/quote] 打开极度慢,今天情况很好!
xuzuning 2014-05-12
  • 打赏
  • 举报
回复
控件的滚动条是直接调用操作系统功能的,所以具有较高的优先级 若改用滚动条控件的话,应该就没有这种情况了 读卡就是另回事了 显然你读卡器不是利用中断传送数据的,所以出现等待就很正常了
十豆三 2014-05-12
  • 打赏
  • 举报
回复
引用 2 楼 yrt888 的回复:
不知论坛抽风还是我的宽带抽风,来论坛真是艰难!
是打开慢?还是什么?
yrt888 2014-05-12
  • 打赏
  • 举报
回复
不知论坛抽风还是我的宽带抽风,来论坛真是艰难!
十豆三 2014-05-12
  • 打赏
  • 举报
回复
引用 4 楼 xuzuning 的回复:
控件的滚动条是直接调用操作系统功能的,所以具有较高的优先级 若改用滚动条控件的话,应该就没有这种情况了 读卡就是另回事了 显然你读卡器不是利用中断传送数据的,所以出现等待就很正常了
我的读卡器是特殊用途,所以才发现此问题。 不过这个问题的确可小可大。
yrt888 2014-05-11
  • 打赏
  • 举报
回复
这个要看看那个懂得其他语言的朋友, 写个类似的程序试一试,会不会出现如此情况才好说!

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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