Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
studibenker
1 / 1 / 0
Регистрация: 22.09.2014
Сообщений: 32
1

[Многопоточность] Как в функцию, которая будет выполняться в отдельном потоке, передать нужные аргументы?

22.09.2014, 18:53. Просмотров 517. Ответов 3
Метки нет (Все метки)

Есть функция:
C++
1
2
3
4
5
6
7
8
9
10
UINT control1(LPVOID Param)
{
        char msg;char pr[]="w";
    while(true){
        for(i=1;i<=16;i++)
        for(j=1;j<=16;j++)
            if(stream[i]==j){clients[j]=i;MessageBoxA(NULL,"User [i] is connected!","Connect",MB_OK);}
    for(i=1;i<=16;i++)
        if(User[i].Send(pr,sizeof(pr))<0&&stat[i]==1){User[i].Close();stat[i]=0;MessageBoxA(NULL,"User [i] is disconnected!","Disconnect",MB_OK);}
}
Как ей передать мои массивы (clients[],stat[] и.т.д.),если она может принимать только LPVOID Param(кстати,что это за такой аргумент?). Если после LPVOID Param начну перечислять передаваемые аргументы,то AfxBeginThread(control1,this) не будет работать. Если функция control1 будет не UINT,то тоже не будет работать. Как же быть,как передать мои массивы в поток и извлекать обратно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2014, 18:53
Ответы с готовыми решениями:

Как запустить метод класса в отдельном потоке?
Как запустить метод класса в отдельном потоке?

Функция-член класса в отдельном потоке
люди я столкнулся со странной проблемой. Мне нужно запустить функцию член...

Простейший поток, не хочет выполняться в отдельном потоке!
На форме два элемента прогресс_бар + кнопка, по клику на которую должна...

Написать функцию, которая будет выполняться раз в день
Всем доброго времени суток. как в MS SQL Server Management studia сделать...

Как заставить функцию выполняться в потоке
По примерам написал код создания потока: #include &lt;iostream&gt; using namespace...

3
Людвиг Бодмер
356 / 355 / 211
Регистрация: 29.03.2013
Сообщений: 866
Завершенные тесты: 4
23.09.2014, 11:09 2
studibenker, Передача переменных в поток эту тему смотрели?
0
studibenker
1 / 1 / 0
Регистрация: 22.09.2014
Сообщений: 32
23.09.2014, 16:10  [ТС] 3
смотрел,но я с CWinThead работаю,а там другие параметры
0
Людвиг Бодмер
356 / 355 / 211
Регистрация: 29.03.2013
Сообщений: 866
Завершенные тесты: 4
23.09.2014, 17:17 4
studibenker, ну через структуру то можно передать аргументы? Я себе это представил примерно таким псевдокодом:
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
#include "stdafx.h"
#include <windows.h>
#include <afxwin.h>
typedef struct
{
    char * clients;
    char * stat;
   /* всё, что душе угодно */
} MsParams_t;
 
UINT control1(LPVOID Param)
{
    MsParams_t * ptr = (MsParams_t *)Param;
      
            if(ptr->clients[i]==j){(ptr->clients[j]=i;MessageBoxA(NULL,"User [i] is connected!","Connect",MB_OK);}
   ...
}
 
    
int _tmain(int argc, _TCHAR* argv[])
{
 static MsParams_t params;
  params.clients = "sample";
  params.stat = "1234";
CWinThread* myWinThread = AfxBeginThread(*control1,(void*)&params);
 
    return 0;
}
Или я не прав?
Еще вариант попробовать глобальные переменные использовать.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2014, 17:17

Как в функцию передать функцию, которая будет слотом?
Как в функцию передать функцию, которая будет слотом? То, что написано в...

Как выполнить функцию в отдельном потоке?
Вызывается функция, которая выполняется достаточно долго. Как вызвать эту...

Как запустить функцию в отдельном потоке?
Есть вот такая функция: bool form1::is_sector_overflowed(Label^ lbl, int x,...


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

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

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