Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Thread и его параметры.

10K
15 апреля 2007 года
nuhop
50 / / 24.03.2007
У меня два теоретических вопроса:
1. Как правильно передавать в Thread параметры, если их несколько?
В учебнике есть такой пример:

Код:
UINT ThreadProc (LPVOID param)
{
   ...
}

void on_start()
{
  HWND hWnd = GetSafeHwnd();
  AfxBeginThread(ThreadProc, hWnd, THREAD_PRIORITY_NORMAL);
  ...
}


2. Как из Thread получить доступ, предположим, к progress bar основного диалогового окна, зная hWnd последнего?
10K
16 апреля 2007 года
nuhop
50 / / 24.03.2007
Пример кода, который не работает.
Создаем объект в header-e:
 
Код:
CProgressCtrl   m_progress;


Далее основная часть:

Код:
UINT ThreadProc(LPVOID param)
{

    ::MessageBox((HWND)param, "Thread activated.", "Thread", MB_OK);
    ::SetDlgItemText((HWND)param, IDC_EDIT1, "HELLO");

    /* Почему этот объект не виден? */
    m_progress.SetPos(5);

    return 0;
}


void CMyTestDlg::OnOK()
{
    HWND hWnd = GetSafeHwnd();
    AfxBeginThread(ThreadProc, hWnd, THREAD_PRIORITY_NORMAL);
}
2.2K
16 апреля 2007 года
REFOT
181 / / 08.04.2005
Я так понимаю, что m_progress у тебя член класса CMyTestDlg?
Если это так, то у тебя ThreadProc является глобальной функцией, поэтому ей не видны ни методы, ни члены класса CMyTestDlg.
Попробуй так:

Код:
UINT ThreadProc(LPVOID param)
{
   if(!param)
      return 0;

   CMyTestDlg* pMyTestDlg = (CMyTestDlg*) param;  
   pMyTestDlg->m_progress.SetPos(5);
   
   return 0;
}


void CMyTestDlg::OnOK()
{
    AfxBeginThread(ThreadProc, this, THREAD_PRIORITY_NORMAL);
}
10K
16 апреля 2007 года
nuhop
50 / / 24.03.2007
Спасибо большое. Я упустил this.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог