Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Lớp Time in ra thời gian chạy không tốt - Cách khắc phục

  1. #1
    Ngày gia nhập
    12 2008
    Bài viết
    198

    Wink Lớp Time in ra thời gian chạy không tốt - Cách khắc phục

    http://forums.congdongcviet.com/show...31&postcount=5
    đây là 1 VD về lớp timer mình tìm được trên diễn đàn
    mình có câu hỏi thế này
    Code:
    // MFCApp2Dlg.cpp : implementation file
    //
    
    #include "stdafx.h"
    #include "MFCApp2.h"
    #include "MFCApp2Dlg.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // CMFCApp2Dlg dialog
    
    
    
    
    CMFCApp2Dlg::CMFCApp2Dlg(CWnd* pParent /*=NULL*/)
        : CDialog(CMFCApp2Dlg::IDD, pParent)
        , m_time(2008,12,13,0,0,0)
    {
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CMFCApp2Dlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialog::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CMFCApp2Dlg, CDialog)
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        //}}AFX_MSG_MAP
        ON_WM_TIMER()
        ON_BN_CLICKED(IDC_TEST, &CMFCApp2Dlg::OnBnClickedTest)
    END_MESSAGE_MAP()
    
    
    // CMFCApp2Dlg message handlers
    
    BOOL CMFCApp2Dlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
    
        // Set the icon for this dialog.  The framework does this automatically
        //  when the application's main window is not a dialog
        SetIcon(m_hIcon, TRUE);         // Set big icon
        SetIcon(m_hIcon, FALSE);        // Set small icon
    
        // TODO: Add extra initialization here
       
    
        return TRUE;  // return TRUE  unless you set the focus to a control
    }
    
    // If you add a minimize button to your dialog, you will need the code below
    //  to draw the icon.  For MFC applications using the document/view model,
    //  this is automatically done for you by the framework.
    
    void CMFCApp2Dlg::OnPaint()
    {
        if (IsIconic())
        {
            CPaintDC dc(this); // device context for painting
    
            SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
            // Center icon in client rectangle
            int cxIcon = GetSystemMetrics(SM_CXICON);
            int cyIcon = GetSystemMetrics(SM_CYICON);
            CRect rect;
            GetClientRect(&rect);
            int x = (rect.Width() - cxIcon + 1) / 2;
            int y = (rect.Height() - cyIcon + 1) / 2;
    
            // Draw the icon
            dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
            CDialog::OnPaint();
        }
    }
    
    // The system calls this function to obtain the cursor to display while the user drags
    //  the minimized window.
    HCURSOR CMFCApp2Dlg::OnQueryDragIcon()
    {
        return static_cast<HCURSOR>(m_hIcon);
    }
    
    
    void CMFCApp2Dlg::OnTimer(UINT_PTR nIDEvent)
    {  
        CTimeSpan ts(0,0,0,1);
        m_time+=ts;
        CString s;
        s.Format("%d:%d:%d",m_time.GetHour(),m_time.GetMinute(),m_time.GetSecond());
        SetDlgItemText(IDC_STATIC,s);
        CDialog::OnTimer(nIDEvent);
    }
    ///////////////////////////////////////////////////////////////
    void vovan()
    {
    	Sleep(3000);
    }
    void CCproDlg::OnBnClickedButton1()
    {
    	SetTimer(1,1,0);
    	vovan();
    	// TODO: Add your control notification handler code here
    }
    Phần đỏ là phần mình thêm vào so với bài viết ở đây http://forums.congdongcviet.com/show...14&postcount=4

    Mình hỏi là nếu mình thêm Sleep nó 3 giây thì nó không đếm được 3 giây đó,vậy giải quyết thế nào đây?????
    Attached Files Attached Files
    • Kiểu file: rar C.rar (38.7 KB, 4 views)

  2. #2
    Ngày gia nhập
    01 2009
    Bài viết
    89

    Mình hỏi là nếu mình thêm Sleep nó 3 giây thì nó không đếm được 3 giây đó,vậy giải quyết thế nào đây?????
    nghĩa là sao dzậy?

  3. #3
    Ngày gia nhập
    12 2008
    Bài viết
    198

    Trích dẫn Nguyên bản được gửi bởi ngocbig™ Xem bài viết
    nghĩa là sao dzậy?
    Mình có Up lên diễn đàn rồi ,hihi,ý mình là nếu mình Sleep 3 giây thì settimer sẽ không đếm 3 giây đó,đợi khi nào xong lệnh sleep thì nó mới bắt đầu đếm thời gian

  4. #4
    Ngày gia nhập
    11 2008
    Nơi ở
    vngameday.com
    Bài viết
    62

    Mình hỏi là nếu mình thêm Sleep nó 3 giây thì nó không đếm được 3 giây đó,vậy giải quyết thế nào đây?????
    Theo ý mình thì, trước khi sleep 3 giây cậu tạo thêm 1 thread nữa, chạy trong khoảng 3 giây đó, sau khi hết 3 giây, thread này cũng sẽ bị huỷ.
    vngameday.com - khi niềm đam mê luôn rực cháy. Rất mong nhận được sự đóng góp từ các bạn...

  5. #5
    Ngày gia nhập
    01 2009
    Bài viết
    89

    Trích dẫn Nguyên bản được gửi bởi Cpro Xem bài viết
    Mình có Up lên diễn đàn rồi ,hihi,ý mình là nếu mình Sleep 3 giây thì settimer sẽ không đếm 3 giây đó,đợi khi nào xong lệnh sleep thì nó mới bắt đầu đếm thời gian
    Cậu cho sleep 3 giây thì nó phải sleep 3 giây là đúng rồi. Nếu không muốn nó bỏ qua 3 giây đó thì đừng cho sleep nữa. Mình khó hiểu là ở chỗ này.

  6. #6
    Ngày gia nhập
    01 2009
    Bài viết
    89

    Mặc định Lớp Time in ra thời gian chạy không tốt - Cách khắc phục

    Sorry Cpro! Mình chưa xem kỹ nên hiểu nhầm ý bạn. Bạn tạo một thread khác nữa là đc.

  7. #7
    Ngày gia nhập
    12 2008
    Bài viết
    198

    Trích dẫn Nguyên bản được gửi bởi ngocbig™ Xem bài viết
    Sorry Cpro! Mình chưa xem kỹ nên hiểu nhầm ý bạn. Bạn tạo một thread khác nữa là đc.
    Mình chỉ lấy VD là hàm Sleep thôi,nếu giả sử mình có 1 hàm nào sử lý trong nút bấm button đó thì nó cũng sẽ không đếm thời gian mà chương trình chạy đâu,híc híc,chỉ khi nào chương trình không chạy gì,chỉ hiển thị mỗi Dialog thì nó mới đếm thời gian,cho mình hỏi là cách tạo Thread trong MFC như thế nào vậy???

  8. #8
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Thread có thể chạy song song với chương trình nên có thể giải quyết được yêu cầu của bạn. Để tạo thread bạn dùng hàm ::CreateThread

    HANDLE CreateThread(
    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    SIZE_T dwStackSize,
    LPTHREAD_START_ROUTINE lpStartAddress,
    LPVOID lpParameter,
    DWORD dwCreationFlags,
    LPDWORD lpThreadId
    );
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  9. #9
    Ngày gia nhập
    12 2008
    Bài viết
    198

    EM tưởng là trong MFC có hàm tạo thread sẵn đơn giản hơn là trong win32API chứ .hehe

  10. #10
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Trong MFC có hàm AfxBeginThread. Đã dùng MFC thì dùng hàm này, hoặc dùng _beginthreadex, không được dùng CreateThread. Tại sao thì đọc mấy cuốn sách về Multithread sẽ rõ.
    Hồi xưa vì hàm CreateThread này mà tui mất ăn mất ngũ 1 tuần đấy.

Các đề tài tương tự

  1. Cho 1 Label di chuyển khắp Form truong suốt thời gian chạy
    Gửi bởi provn trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 10-11-2012, 09:07 AM
  2. Time Stopper 3.12 - Kéo dài thời gian dùng thử phần mềm
    Gửi bởi chjentha11 trong diễn đàn Software (Phần mềm) | Ebooks
    Trả lời: 0
    Bài viết cuối: 20-09-2011, 07:41 PM
  3. Lập trình C++ | Xây dựng lớp thời gian Time!
    Gửi bởi theboy1904 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 28-04-2009, 10:44 AM
  4. Lớp Time in ra thời gian chạy không tốt - Cách khắc phục
    Gửi bởi Cpro trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 10
    Bài viết cuối: 20-02-2009, 07:39 PM
  5. Lỗi Time Debugger khắc phục sao đây >"< ????
    Gửi bởi iamvtn trong diễn đàn Thắc mắc chung
    Trả lời: 3
    Bài viết cuối: 16-01-2008, 09:19 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn