PDA

Tam Sürümünü Görmek İçin : VC++ Thread sorunu?


cshell
16/08/2007, 12:33
Visual C++ da sonsuz bir döngü içerisinde dosyadan string okuyorum ve okuduğum stringleri Listbox'a ekliyorum.Buraya kadar herşey güzel.Ben bu işlemi thread kullanarak yapmaya çalıştım fakat ListBox'a threadın içinden string ekleyemiyorm :( .Thread için AfxBeginThread fonksiyonunu kullandım yardımlarınızı bekliyorum


tankado
16/08/2007, 13:33
Kodları görmek gerek. Yoksa çok ezbere olacak.

cshell
16/08/2007, 13:43
Buyrun;


class CMyDlg : public CDialog
{
...
.....

public:
CListBox *m_datalist;
public:
afx_msg void OnBnClickedButton1();


}




//--------------------------------------------------------------------------
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();

m_datalist=(CListBox*)GetDlgItem(IDC_LIST1);
return TRUE;
}

UINT readThread(LPVOID lParam)
{
CMyDlg *myDlg;
while(1)
{

myDlg->m_datalist->AddString("Deneme");

}
return FALSE;
}
void CMyDlg::OnBnClickedButton1() //Butona Tıklayınca hata !
{
AfxBeginThread(readThread,NULL);
}

Raiser
16/08/2007, 20:28
Buyrun;


class CMyDlg : public CDialog
{
...
.....

public:
CListBox *m_datalist;
public:
afx_msg void OnBnClickedButton1();


}




//--------------------------------------------------------------------------
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();

m_datalist=(CListBox*)GetDlgItem(IDC_LIST1);
return TRUE;
}

UINT readThread(LPVOID lParam)
{
CMyDlg *myDlg;
while(1)
{

myDlg->m_datalist->AddString("Deneme");

}
return FALSE;
}
void CMyDlg::OnBnClickedButton1() //Butona Tıklayınca hata !
{
AfxBeginThread(readThread,NULL);
}

readThread çağrısı içinde "CMyDlg *myDlg;" tanımı yapılmış, fakat o pointerın nereye işaret ettiği belli değil. Thread fonksiyonu için parametre olarak listbox'un handle değerini geçirmeyi deneyebilirsiniz, sonra o handle'ı kullanarak o elemana ulaşılabilir.