Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.63
Игорь98
35 / 35 / 3
Регистрация: 12.02.2010
Сообщений: 239
#1

Передача переменных в поток - C++

01.09.2011, 18:39. Просмотров 7099. Ответов 5
Метки нет (Все метки)

Вот никак не могу разобраться, как передать переменную в функцию потока. Вот например есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
DWORD WINAPI Ms(LPVOID pr)
{
     MessageBox(NULL, "Hello", "Hello", MB_OK);
     return 0;
}
 
int main()
{
    LPVOID pr;
    HANDLE hThr = CreateThread(NULL, 0, Ms, pr, 0, NULL);
    Sleep(5000);
    CloseHandle(hThr);
}
Тут все понятно, а вот как вызвать вот такой поток, не понимаю:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DWORD WINAPI Ms(LPVOID pr, char* text)
{
     MessageBox(NULL, text, "Hello", MB_OK);
     return 0;
}
 
int main()
{
    LPVOID pr;
    char* tr = "Hello!";
    HANDLE hThr = CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE) Ms,(LPVOID) (pr, tr), 0, NULL);
    Sleep(5000);
    CloseHandle(hThr);
}
Сообщение то выводится, но вместо текста сообщения выводится, непонятный закодированный текст!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2011, 18:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача переменных в поток (C++):

Передача копии адреса в поток - C++
Всем привет. Проблема в том что когда запускается поток итератор уже указывает за пределы листа. Как передать копию адреса или владение...

C++ 11 передача ссылки в поток thread - C++
Доброго времени суток, возникла такая ситуация. Использую я QT Creator с компилятором MinGW32 Есть у меня статический метод который я...

Передача в поток многомерных массивов по указателю - C++
Доброго всем времени суток. У меня возникло непонимание того, как можно передать двумерный (многомерный) массив в поток. Пока это...

Передача сообщения в поток для послед. записи в файл - C++
Здравствуйте форумчане. Возник вопрос. Пишу клиент сервер (tcp). Сервер принимает сообщение , переданное клиентом через функцию ...

Передача переменных - C++
Имеется метод void Question::reg(Date* a) { int year1,day1,hour1,min1,sec1; char* Mon1; year1=a->getYear(); ...

Передача переменных в функцию - C++
#include <iostream> int fun(int x, int y, int z); int main() { int x, y, z;

5
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
01.09.2011, 18:53 #2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <windows.h>
 
typedef struct
{
    char * title;
    char * text;
    int buttons;
   /* всё, что душе угодно */
} MsParams_t;
 
DWORD WINAPI Ms( void * param )
{
    MsParams_t * ptr = (MsParams_t *)param;
 
    MessageBox( 0, ptr->text, ptr->title, ptr->buttons );
 
    return 0;
}
 
int main()
{
    static MsParams_t params;
 
    params.title = "Title";
    params.text = "Hello";
    params.buttons = MB_OK | MB_ICONINFORMATION;
 
    HANDLE hThr = CreateThread( NULL, 0,(LPTHREAD_START_ROUTINE) Ms, (void*)&params, 0, NULL );
 
    Sleep(5000);
 
    CloseHandle(hThr);
}
2
xAtom
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
01.09.2011, 18:57 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <windows.h>
#include <stdio.h>
 
DWORD WINAPI  Thread(LPVOID param) {
    const char* str = (const char*) param;
    puts(str);
    MessageBox(NULL, str, "hello", MB_OK | MB_ICONQUESTION);
 
    ExitThread(0u);
    return 0;
}
 
 
int main(void) {
 
   DWORD  id;
   const char* str = "Hello Thread !!!";
 
   HANDLE  thread = CreateThread(NULL, 0U, Thread, (LPVOID)str, THREAD_PRIORITY_NORMAL, &id);
   system("pause");
   CloseHandle(thread);
 
    return (0);
}
2
Kastaneda
01.09.2011, 19:23
  #4

Не по теме:

Кстати Дж.Рихтер советует использовать _beginthreadex() вместо CreateThread() тем, кто пишет на С/С++ под Windows.

0
sandye51
01.09.2011, 19:32
  #5

Не по теме:

Kastaneda, лучше бы он посоветовал использовать openmp

0
talis
01.09.2011, 19:35     Передача переменных в поток
  #6

Не по теме:

sandye51, как OpenMP поможет в вопросе выполнения, скажем, скачки файла и обработки оконных сообщений винды в разных потоках? OpenMP - хорошая штука, но не универсальная.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2011, 19:35
Привет! Вот еще темы с ответами:

Передача переменных в массив - C++
Надо решить небольшую проблему есть следующий массив BYTE array = { 0xff,0x00,0x00,0x00}; хочу за место цифры 4 поставит...

Передача значений переменных функциями - C++
Подскажите пожалуйста, как реализовать эту функцию с помощью указателя (а не ссылки). int clearstr(student&amp; a) { delete a.pi; ...

Передача переменных из функции в метод класса - C++
У меня есть главная функция и класс, в котором есть 2 функции. Как мне после выполнения 1-й функции с класса вывести с нее 3 переменных...

Передача локальных переменных одной функции другой - C++
Добрый день, подскажите, как осуществить передачу локальных переменных получаемых в одной функции другой?Облазил гугл, ничего внятного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
01.09.2011, 19:35
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru