Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: MFC Cách Truyền Tham số vào Thread ???

  1. #1
    Ngày gia nhập
    10 2008
    Nơi ở
    sài gòn
    Bài viết
    422

    Wink MFC Cách Truyền Tham số vào Thread ???

    VD em có 1 đoạn code như thế này
    Code:
    class SINHVIEN 
    {
        int masv;
        ...............
    }
    
    SINHVIEN A[100];
    for(int i=0;i<n;i++)
    {
          AfxBeginThread(MyThreadProc,(LPVOID)this);
    }
    // em muốn mỗi 1 lần lặp là lại tạo 1 Thread và truyền tham số cho nó là A.masv

    vậy em phải làm thế nào ???

  2. #2
    Ngày gia nhập
    10 2007
    Bài viết
    45

    - Bạn có thể nêu cấu trúc hàm MyThreadProc trong thread bạn ko?

    - Truyền tham số cho thread là truyền cho nó địa chỉ của tham số đó.

    Code:
    AfxBeginThread(MyThreadProc,(LPVOID)&sv->mssv);
    Thân,

  3. #3
    Ngày gia nhập
    10 2008
    Nơi ở
    sài gòn
    Bài viết
    422

    - Bạn có thể nêu cấu trúc hàm MyThreadProc trong thread bạn ko?

    - Truyền tham số cho thread là truyền cho nó địa chỉ của tham số đó.

    Code:

    AfxBeginThread(MyThreadProc,(LPVOID)&sv->mssv);

    Thân,
    Trả lời cùng với trích dẫn
    Cảm ơn bạn rất nhiều,mình sẽ xem xét kỹ
    có phải như bài của mình thì sẽ là

    Code:
    class SINHVIEN 
    {
        int masv;
        ...............
    }
    
    SINHVIEN A[100];
    for(int i=0;i<n;i++)
    {
          AfxBeginThread(MyThreadProc,(LPVOID)A.sv);
    }
    viết thế này đúng không
    AfxBeginThread(MyThreadProc,(LPVOID)A.sv);
    Với cả lúc viết hàm thì ta viết thế nào
    VD như
    UINT MyThreadProc( (LPVOID)A.sv) //viết thế này ah
    Đã được chỉnh sửa lần cuối bởi haian : 13-03-2009 lúc 08:13 PM.

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

    Tham số thứ hai kiều LPVOID là một tham tùy ý bạn truyền vào thôi. Có thể truyền bất kỳ một số (32 bit) nào. Nhưng thường thì người ta sẽ truyền một giá trị pointer vào. Trong trường hợp của bạn, nếu bạn muốn truy cập vào mảng A bên trong thread thì đơn giản chỉ cần truyền (LPVOID)A. Trong THreadProc thì lại chuyển trở lại là (SINHVIEN*)wParam (wParam là tham số của ThreadProc chẳng hạn). Tiếp theo trong ThreadProc bạn thao tác với mảng A bình thường.

    Code:
    for(int i=0;i<n;i++)
    {
          AfxBeginThread(MyThreadProc,(LPVOID)A.sv);
    }
    bạn đinh tạo n thread với đoạn code trên sao??

  5. #5
    Ngày gia nhập
    10 2008
    Nơi ở
    sài gòn
    Bài viết
    422

    Tham số thứ hai kiều LPVOID là một tham tùy ý bạn truyền vào thôi. Có thể truyền bất kỳ một số (32 bit) nào. Nhưng thường thì người ta sẽ truyền một giá trị pointer vào. Trong trường hợp của bạn, nếu bạn muốn truy cập vào mảng A bên trong thread thì đơn giản chỉ cần truyền (LPVOID)A. Trong THreadProc thì lại chuyển trở lại là (SINHVIEN*)wParam (wParam là tham số của ThreadProc chẳng hạn). Tiếp theo trong ThreadProc bạn thao tác với mảng A bình thường.
    cảm ơn bạn ngọc big đã trả lời mình,mình đã thử làm như cách của cậu nhưng có vẻ là không ổn lắm


    trong File dlg.cpp
    Code:
    UINT __cdecl CTaoNThreadDlg::MyThreadProc( int pParam) 
    {
    	TCHAR s[10];
    	wsprintf(s,L"%d",pParam);
    	AfxMessageBox(s,0,0);
    	return 0;
    }
    void CTaoNThreadDlg::OnBnClickedButton1()
    {
    	int i;
    	for (i=0;i<10;i++)
    	{
    		AfxBeginThread(MyThreadProc,(LPVOID)i);
    	}
    	// TODO: Add your control notification handler code here
    }
    Trong File .h
    Code:
    	afx_msg void OnBnClickedButton1();
        static UINT __cdecl MyThreadProc( int lParam);

    thì sẽ chạy lỗi

    còn nếu mình truyền là

    Code:
    UINT __cdecl CTaoNThreadDlg::MyThreadProc( LPVOID pParam) 
    {
    	TCHAR s[10];
    	wsprintf(s,L"%d",pParam);
    	AfxMessageBox(s,0,0);
    	return 0;
    }
    thì chạy được
    ah,nhân đây mình hỏi luôn là có thể truyền được nhiều tham số vào thread không ???
    đây là Project nó chạy lỗi nè
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi haian : 14-03-2009 lúc 12:39 PM.

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

    Mặc định MFC Cách Truyền Tham số vào Thread ???

    Cậu vẫn chưa hiếu ý mình.

    Code:
    AfxBeginThread(MyThreadProc,(LPVOID)A);
    Code:
    UINT __cdecl CTaoNThreadDlg::MyThreadProc( LPVOID pParam) 
    {
            SINHVIEN* sv_array = (SINHVIEN*)pParam;
    	TCHAR s[10];
    	wsprintf(s,L"%d",pParam);
    	AfxMessageBox(s,0,0);
    	return 0;
    }
    Ví dụ của bạn đây
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi ngocbig™ : 14-03-2009 lúc 12:54 PM.

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

  1. Cách truyền tham số cho một thread như thế nào ?
    Gửi bởi leemanhj916 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 16-10-2015, 03:33 PM
  2. Phân biệt truyền biến bằng tham trị, tham chiếu, địa chỉ. Xin cảm ơn.
    Gửi bởi thaoha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 18-02-2012, 02:03 PM
  3. Lập trình C++ Truyền tham số vào hàm trong lập trình Thread, cần giúp đỡ.
    Gửi bởi reach_phan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 07-11-2011, 01:17 PM
  4. Kỹ thuật C Truyền tham số cho Thread trong lập trình WIN32 API?
    Gửi bởi ductrongcp trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 03-05-2011, 08:22 PM
  5. Thắc mắc về truyền tham biến và tham trị .. và còn nữa ^^
    Gửi bởi without_you 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: 04-02-2010, 08:46 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