• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm API

Các thủ thuật liên quan đến xử lý chuỗi và thời gian
User avatar
xuanha
Guru
Guru
Posts: 1230
Joined: Thu 19/08/2010 4:25 pm
Location: Ban Tổ chức Thành uỷ Hưng Yên, tỉnh Hưng Yên
Has thanked: 13 times
Been thanked: 380 times
Contact:

Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm API

Postby xuanha » Thu 20/09/2012 10:05 pm

Thủ thuật: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm API
Tác giả: XuanHa
Mô tả: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm API


Code: Select all

Private Sub Form_Click()
Dim i%
Do
Me.Caption = Now: DoEvents
Loop Until i > 0
End Sub


Kiểm phiếu Đại hội Đoàn, Đại hội Đảng
http://caulacbovb.com/forum/viewtopic.php?t=23599

User avatar
truongphu
VIP
VIP
Posts: 4764
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby truongphu » Fri 21/09/2012 8:20 am

xuanha wrote:

Code: Select all

Private Sub Form_Click()
Dim i%
Do
Me.Caption = Now: DoEvents
Loop Until i > 0
End Sub


Sao tôi đọc code mà chẳng hiểu tí gì? :-O
Mong tác giả giải thích rõ thêm :(
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
xuanha
Guru
Guru
Posts: 1230
Joined: Thu 19/08/2010 4:25 pm
Location: Ban Tổ chức Thành uỷ Hưng Yên, tỉnh Hưng Yên
Has thanked: 13 times
Been thanked: 380 times
Contact:

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby xuanha » Fri 21/09/2012 9:18 am

truongphu wrote:Sao tôi đọc code mà chẳng hiểu tí gì? :-O
Mong tác giả giải thích rõ thêm :(


Bác lại cười em rồi! Em xin giải thích về ý ngĩa của đoạn code trên
Dim i%: i có giá trị bằng 0
Do
Me.Caption = Now: DoEvents
Loop Until i > 0: Kết thúc khi i có giá trị lớn hơn không (điều này sẽ không bao giờ xảy ra với đoạn code này do, vậy vòng lặp luôn luôn được thực hiện, đồng thời sẽ caption của form luôn luôn = Now ở thời điểm hiện tại).

Với vòng lặp trên thì cũng không cần phải sử dụng biến i, có thể làm như sau:
Do
Me.Caption = Now: DoEvents
Loop Until len(Now)= 0

Và dưới đây là đoạn code dòng chữ chạy em làm trên Word
  1. Dim x$, i@
  2. Private Sub Document_Open()
  3. x = "Nguyễn Xuân Hà, Cán bộ Ban Tổ chức Thành uỷ Hưng Yên, tỉnh Hưng Yên __ "
  4. Do
  5. i = i + 1
  6. If i = 30000 Then
  7. x = Mid(x, 2) & Left(x, 1)
  8. Application.Caption = x
  9. i = 0
  10. End If
  11. DoEvents
  12. Loop Until Len(Now) = 0
Last edited by xuanha on Tue 25/09/2012 10:18 pm, edited 1 time in total.
Kiểm phiếu Đại hội Đoàn, Đại hội Đảng
http://caulacbovb.com/forum/viewtopic.php?t=23599

User avatar
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Posts: 1259
Joined: Thu 03/06/2010 9:23 pm
Location: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 times
Been thanked: 138 times
Contact:

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby VuVanHoanh » Sat 22/09/2012 1:41 pm

à, một dạng Timer...
chỉ có điều tiêu đề bạn viết sai mục đích của bài viết rồi.
Since 2008...
One love! :x

dtbinhtomay
Posts: 1
Joined: Wed 20/05/2009 8:44 pm

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby dtbinhtomay » Tue 25/09/2012 9:57 pm

Code đơn giản mà hiệu quả nhỉ?
như vậy không cần biến i làm gì cho dài dòng
Private Sub Form_Click()
Do
Me.Caption = Now: DoEvents
Loop
End Sub

User avatar
dazzlingvit
Guru
Guru
Posts: 960
Joined: Tue 18/01/2011 10:21 am
Location: Sinh ra từ hư vô, sống trong thế giới ảo...
Has thanked: 7 times
Been thanked: 112 times
Contact:

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby dazzlingvit » Wed 26/09/2012 6:03 pm

xuanha wrote:
truongphu wrote:Sao tôi đọc code mà chẳng hiểu tí gì? :-O
Mong tác giả giải thích rõ thêm :(


Bác lại cười em rồi! Em xin giải thích về ý ngĩa của đoạn code trên
Dim i%: i có giá trị bằng 0
Do
Me.Caption = Now: DoEvents
Loop Until i > 0: Kết thúc khi i có giá trị lớn hơn không (điều này sẽ không bao giờ xảy ra với đoạn code này do, vậy vòng lặp luôn luôn được thực hiện, đồng thời sẽ caption của form luôn luôn = Now ở thời điểm hiện tại).

Với vòng lặp trên thì cũng không cần phải sử dụng biến i, có thể làm như sau:
Do
Me.Caption = Now: DoEvents
Loop Until len(Now)= 0

Và dưới đây là đoạn code dòng chữ chạy em làm trên Word
  1. Dim x$, i@
  2. Private Sub Document_Open()
  3. x = "Nguyễn Xuân Hà, Cán bộ Ban Tổ chức Thành uỷ Hưng Yên, tỉnh Hưng Yên __ "
  4. Do
  5. i = i + 1
  6. If i = 30000 Then
  7. x = Mid(x, 2) & Left(x, 1)
  8. Application.Caption = x
  9. i = 0
  10. End If
  11. DoEvents
  12. Loop Until Len(Now) = 0

Trong quá trình thực hiện cái này, chương trình cũng đứng im luôn à? Nếu thế thì có ích gì ở đây?
Dazzling V.I.T
Hãy gọi tôi là vịt :)

User avatar
xuanha
Guru
Guru
Posts: 1230
Joined: Thu 19/08/2010 4:25 pm
Location: Ban Tổ chức Thành uỷ Hưng Yên, tỉnh Hưng Yên
Has thanked: 13 times
Been thanked: 380 times
Contact:

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby xuanha » Thu 27/09/2012 10:09 am

dazzlingvit wrote:Trong quá trình thực hiện cái này, chương trình cũng đứng im luôn à? Nếu thế thì có ích gì ở đây?

Mình chạy nó có bị sao đâu.
dazzlingvit wrote:Nếu thế thì có ích gì ở đây?

Về lợi ích thì tuỳ thuộc vào mỗi người sử dụng để làm gì, áp dụng vào đâu, biến đổi như thế nào.
dazzlingvit không thấy ích lợi gì thì không cần phải tìm hiểu cho phí thời gian.
Kiểm phiếu Đại hội Đoàn, Đại hội Đảng
http://caulacbovb.com/forum/viewtopic.php?t=23599

User avatar
dazzlingvit
Guru
Guru
Posts: 960
Joined: Tue 18/01/2011 10:21 am
Location: Sinh ra từ hư vô, sống trong thế giới ảo...
Has thanked: 7 times
Been thanked: 112 times
Contact:

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby dazzlingvit » Thu 27/09/2012 5:33 pm

Vậy bạn xuanha thử ví dụ một ứng dụng của cái này xem. Ít nhất khi mình nhìn thấy vòng lặp như thế kia thì chương trình xử lý vào đâu?
Dazzling V.I.T
Hãy gọi tôi là vịt :)

User avatar
xuanha
Guru
Guru
Posts: 1230
Joined: Thu 19/08/2010 4:25 pm
Location: Ban Tổ chức Thành uỷ Hưng Yên, tỉnh Hưng Yên
Has thanked: 13 times
Been thanked: 380 times
Contact:

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby xuanha » Thu 27/09/2012 10:08 pm

Đoạn code sau dùng cho VB6
  1. Option Explicit
  2. Dim t As Boolean
  3. Private Sub Form_Activate()
  4. Do
  5. Label1.Caption = Now: DoEvents
  6. Loop Until t = True
  7. End Sub
  8.  
  9. Private Sub Form_Unload(Cancel As Integer)
  10. t = True
  11. End Sub
  12.  
Kiểm phiếu Đại hội Đoàn, Đại hội Đảng
http://caulacbovb.com/forum/viewtopic.php?t=23599

User avatar
dazzlingvit
Guru
Guru
Posts: 960
Joined: Tue 18/01/2011 10:21 am
Location: Sinh ra từ hư vô, sống trong thế giới ảo...
Has thanked: 7 times
Been thanked: 112 times
Contact:

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby dazzlingvit » Fri 28/09/2012 12:00 am

Cơ mà lặp như thế này ngốn tài nguyên vô cùng (vì lúc nào nó cũng chạy xoành xoạch xoành xoạch cái vòng lặp kia). Nếu bạn xuanha không muốn dùng Timer có thể dùng vòng lặp, nhưng không phải theo cách này :)
Bạn cần thêm hàm Sleep để mỗi khi cập nhật xong thời gian mới, nó tự "ngủ" một thời gian nhất định (1s hoặc 500ms tuỳ thích). Ngủ ở đây khác hẳn với việc chạy hùng hục một vòng lặp nhé.
Mặc dù không chính xác lắm nhưng có thể cải tiến cái của bạn như sau:
  1. Option Explicit
  2. Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
  3. Dim t As Boolean
  4. Private Sub Form_Activate()
  5. Do
  6. Label1.Caption = Now: DoEvents
  7. Sleep 500
  8. Loop Until t = True
  9. End Sub
  10.  
  11. Private Sub Form_Unload(Cancel As Integer)
  12. t = True
  13. End Sub
  14.  
Dazzling V.I.T
Hãy gọi tôi là vịt :)

User avatar
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Posts: 1259
Joined: Thu 03/06/2010 9:23 pm
Location: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 times
Been thanked: 138 times
Contact:

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby VuVanHoanh » Fri 28/09/2012 1:29 pm

cái code trên hình như cũng đơ luôn form vì đơn luồng + Sleep...

~~~~
viewtopic.php?f=52&t=8901&p=126284
Since 2008...
One love! :x

KIDLINUX
Thành viên chính thức
Thành viên chính thức
Posts: 13
Joined: Thu 27/03/2008 10:52 am
Has thanked: 7 times

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby KIDLINUX » Tue 16/10/2012 10:31 am

Cũng là ý hay nhưng thấy không ổn lắm, vì nó sẽ chạy mãi không có thời gian ngơi nghỉ
Dùng Timer thấy ổn hơn bạn ơi

Romeo8x
Thành viên chính thức
Thành viên chính thức
Posts: 23
Joined: Fri 18/04/2008 5:49 pm
Has thanked: 2 times
Been thanked: 14 times

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby Romeo8x » Tue 13/11/2012 5:06 pm

Vứt 1 cái Timer vào so với việc cho vòng lặp nó chạy liên tục trong suốt quá trình chạy chương trình thì cái nào chiếm tài nguyên hệ thông hơn :D

User avatar
truongphu
VIP
VIP
Posts: 4764
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby truongphu » Fri 21/12/2012 9:44 am

dtbinhtomay wrote:Do
Me.Caption = Now: DoEvents
Loop


Dùng vòng lặp vô hạn là điều nên tránh trng sử dụng code vì sẽ chiếm dụng cpu, cho dù ta có thêm lệnh DoEvents.

Để đạt được cùng mục đích mà không dùng Timer, không dùng vòng lặp vô hạn, không dùng hàm API, ta có thể viết như sau:

  1. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  2.     Static ZZ As Date: ZZ = Now
  3.     If Now > ZZ Then ZZ = Date
  4.     Me.Caption = ZZ
  5. End Sub


Code trên sẽ đáp ứng rất nhẹ nhàng.

Chúc mừng Giáng Sinh
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
dazzlingvit
Guru
Guru
Posts: 960
Joined: Tue 18/01/2011 10:21 am
Location: Sinh ra từ hư vô, sống trong thế giới ảo...
Has thanked: 7 times
Been thanked: 112 times
Contact:

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby dazzlingvit » Sat 22/12/2012 10:11 pm

Thực tế khi mình di chuyển chuột liên tục thì cái hàm kia của bác sẽ chạy liên tục mà. Cháu nghĩ nó không làm chậm máy nhưng kể ra nó cũng tốn kém tài nguyên đấy :)
Hơn nữa nếu người dùng để im không di chuột thì nó sẽ không chạy :
Dazzling V.I.T
Hãy gọi tôi là vịt :)

User avatar
01632911829
Thành viên chính thức
Thành viên chính thức
Posts: 42
Joined: Sat 11/08/2012 12:50 pm
Location: Bình Thuận
Has thanked: 4 times
Been thanked: 2 times
Contact:

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby 01632911829 » Sun 30/12/2012 7:26 pm

Tạo 1 lable1 và 1timer. Chỉnh interval timer là 100
cho code này vào là ok thuj. Đơn giản ít tốn tài nguyên

Code: Select all

label1.caption = now


Ko dùng timer chi cho khổ.. Có gì chỉ giáo nha

ducthaodt
Posts: 6
Joined: Fri 29/04/2011 8:01 pm

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby ducthaodt » Thu 27/03/2014 11:15 am

Tại sao mọi người cứ bàn về vấn đề mã nguồn này nhỉ, nếu các bạn dùng mã này thì sẽ tốn tài nguyên và các lệnh sau nó sẽ không thể thực hiện được vì chương trình luôn luôn chạy vòng lập mà không thể thoát ra để sử lí tiếp chương trình khác được, vì đây là đơn nhiệm, nếu cố tình dùng thì hãy tìm hiểu hàm thread, trong khi đó Microsoft đã cung cấp timer rât hiệu nghiệm mà ta lại không dùng , có phải là mất thời gian không các bạn. Nếu các bạn làm cho công ty nào đó mà cứ loay hoay mấy cái mã lệnh kiểu này thì sớm muộn thì cũng phá sản thôi.

User avatar
NTN
Thành viên tâm huyết
Thành viên tâm huyết
Posts: 482
Joined: Wed 05/02/2014 3:43 pm
Location: Đồng Tháp,Việt Nam
Has thanked: 19 times
Been thanked: 7 times
Contact:

Re: Lấy ngày giờ hệ thống không dùng Timer, không dùng hàm A

Postby NTN » Thu 24/04/2014 7:07 am

MÌnh thấy sử dụng Timer dễ hơn á !

Code: Select all

Label1.caption = Date
Label2.caption = Time


Return to “[VB] Chuỗi và Thời gian”

Who is online

Users browsing this forum: No registered users and 1 guest