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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.63
Игорь98
34 / 34 / 3
Регистрация: 12.02.2010
Сообщений: 239
01.09.2011, 18:39     Передача переменных в поток #1
Вот никак не могу разобраться, как передать переменную в функцию потока. Вот например есть код:
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);
}
Сообщение то выводится, но вместо текста сообщения выводится, непонятный закодированный текст!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
talis
 Аватар для talis
789 / 541 / 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);
}
xAtom
 Аватар для xAtom
910 / 735 / 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);
}
Kastaneda
01.09.2011, 19:23
  #4

Не по теме:

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

sandye51
01.09.2011, 19:32
  #5

Не по теме:

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

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

Не по теме:

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

Yandex
Объявления
01.09.2011, 19:35     Передача переменных в поток
Ответ Создать тему
Опции темы

Текущее время: 11:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru