• 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
Hình đại diện của người dùng
xuanha
Guru
Guru
Bài viết: 1222
Ngày tham gia: T.Năm 19/08/2010 4:25 pm
Đến từ: Ban Tổ chức Thành uỷ Hưng Yên, tỉnh Hưng Yên
Has thanked: 13 time
Been thanked: 380 time
Liên hệ:

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

Gửi bàigửi bởi xuanha » T.Năm 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


Mã: Chọn hết

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

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Sáu 21/09/2012 8:20 am

xuanha đã viết:

Mã: Chọn hết

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

Hình đại diện của người dùng
xuanha
Guru
Guru
Bài viết: 1222
Ngày tham gia: T.Năm 19/08/2010 4:25 pm
Đến từ: Ban Tổ chức Thành uỷ Hưng Yên, tỉnh Hưng Yên
Has thanked: 13 time
Been thanked: 380 time
Liên hệ:

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

Gửi bàigửi bởi xuanha » T.Sáu 21/09/2012 9:18 am

truongphu đã viết: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
Sửa lần cuối bởi xuanha vào ngày T.Ba 25/09/2012 10:18 pm với 1 lần sửa.
Kiểm phiếu Đại hội Đoàn, Đại hội Đảng
http://caulacbovb.com/forum/viewtopic.php?t=23599

Hình đại diện của người dùng
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Bài viết: 1259
Ngày tham gia: T.Năm 03/06/2010 9:23 pm
Đến từ: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 time
Been thanked: 137 time
Liên hệ:

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

Gửi bàigửi bởi VuVanHoanh » T.Bảy 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
Bài viết: 1
Ngày tham gia: T.Tư 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

Gửi bàigửi bởi dtbinhtomay » T.Ba 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

Hình đại diện của người dùng
dazzlingvit
Guru
Guru
Bài viết: 959
Ngày tham gia: T.Ba 18/01/2011 10:21 am
Đến từ: Sinh ra từ hư vô, sống trong thế giới ảo...
Has thanked: 7 time
Been thanked: 112 time
Liên hệ:

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

Gửi bàigửi bởi dazzlingvit » T.Tư 26/09/2012 6:03 pm

xuanha đã viết:
truongphu đã viết: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 :)

Hình đại diện của người dùng
xuanha
Guru
Guru
Bài viết: 1222
Ngày tham gia: T.Năm 19/08/2010 4:25 pm
Đến từ: Ban Tổ chức Thành uỷ Hưng Yên, tỉnh Hưng Yên
Has thanked: 13 time
Been thanked: 380 time
Liên hệ:

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

Gửi bàigửi bởi xuanha » T.Năm 27/09/2012 10:09 am

dazzlingvit đã viết: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 đã viết: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

Hình đại diện của người dùng
dazzlingvit
Guru
Guru
Bài viết: 959
Ngày tham gia: T.Ba 18/01/2011 10:21 am
Đến từ: Sinh ra từ hư vô, sống trong thế giới ảo...
Has thanked: 7 time
Been thanked: 112 time
Liên hệ:

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

Gửi bàigửi bởi dazzlingvit » T.Năm 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 :)

Hình đại diện của người dùng
xuanha
Guru
Guru
Bài viết: 1222
Ngày tham gia: T.Năm 19/08/2010 4:25 pm
Đến từ: Ban Tổ chức Thành uỷ Hưng Yên, tỉnh Hưng Yên
Has thanked: 13 time
Been thanked: 380 time
Liên hệ:

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

Gửi bàigửi bởi xuanha » T.Năm 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

Hình đại diện của người dùng
dazzlingvit
Guru
Guru
Bài viết: 959
Ngày tham gia: T.Ba 18/01/2011 10:21 am
Đến từ: Sinh ra từ hư vô, sống trong thế giới ảo...
Has thanked: 7 time
Been thanked: 112 time
Liên hệ:

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

Gửi bàigửi bởi dazzlingvit » T.Sáu 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 :)

Hình đại diện của người dùng
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Bài viết: 1259
Ngày tham gia: T.Năm 03/06/2010 9:23 pm
Đến từ: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 time
Been thanked: 137 time
Liên hệ:

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

Gửi bàigửi bởi VuVanHoanh » T.Sáu 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
Bài viết: 12
Ngày tham gia: T.Năm 27/03/2008 10:52 am
Has thanked: 7 time

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

Gửi bàigửi bởi KIDLINUX » T.Ba 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
Bài viết: 23
Ngày tham gia: T.Sáu 18/04/2008 5:49 pm
Has thanked: 2 time
Been thanked: 14 time

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

Gửi bàigửi bởi Romeo8x » T.Ba 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

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Sáu 21/12/2012 9:44 am

dtbinhtomay đã viết: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

Hình đại diện của người dùng
dazzlingvit
Guru
Guru
Bài viết: 959
Ngày tham gia: T.Ba 18/01/2011 10:21 am
Đến từ: Sinh ra từ hư vô, sống trong thế giới ảo...
Has thanked: 7 time
Been thanked: 112 time
Liên hệ:

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

Gửi bàigửi bởi dazzlingvit » T.Bảy 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 :)

Hình đại diện của người dùng
01632911829
Thành viên chính thức
Thành viên chính thức
Bài viết: 42
Ngày tham gia: T.Bảy 11/08/2012 12:50 pm
Đến từ: Bình Thuận
Has thanked: 4 time
Been thanked: 2 time
Liên hệ:

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

Gửi bàigửi bởi 01632911829 » CN 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

Mã: Chọn hết

label1.caption = now


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

ducthaodt
Bài viết: 6
Ngày tham gia: T.Sáu 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

Gửi bàigửi bởi ducthaodt » T.Năm 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.

Hình đại diện của người dùng
NTN
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 471
Ngày tham gia: T.Tư 05/02/2014 3:43 pm
Đến từ: Cao Lãnh, Đồng Tháp,Việt Nam
Has thanked: 19 time
Been thanked: 7 time
Liên hệ:

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

Gửi bàigửi bởi NTN » T.Năm 24/04/2014 7:07 am

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

Mã: Chọn hết

Label1.caption = Date
Label2.caption = Time


Quay về “[VB] Chuỗi và Thời gian”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.0 khách