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

Поток из не статического метода - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Циклы http://www.cyberforum.ru/cpp-beginners/thread1146082.html
Как написать программу, в которой нужно сложить значения получаемые в цикле? z=sin(\sum_{3}^{10}(a*k+c)) a,c известны
C++ Есть код, нужно перевести на долее понятливый(простой язык) #include <stdio.h> #include <locale.h> #define N1 8 #define N2 9 bool isascend(int* pn, int n); int main() { http://www.cyberforum.ru/cpp-beginners/thread1146073.html
Шаблонные функции C++
Доброго времени суток. Есть шаблонная функция(двоичный сумматор прямого кода): template <class T> void Main_register::badc(T *regist, T term) { int count_bit = sizeof(term)*8; char remainder=0, s1, s2, masc; for (Int64 i=0;i<count_bit;i++) { s1 = *regist & Convert::ToInt64(1<<i)?1:0; s2 = term & Convert::ToInt64(1<<i)?1:0; if((s1+s2+remainder)%2!=0)
Не секу что такое gsoap и где его искать на win7 C++
Чур не ругаться за оффтоп, я впервые пользуюсь форумами! :) Итак, прилагаю файл с лабками, первую я уже сделал, осталась вторая, и на ней я застрял, так как совершенно не секу что такое gsoap и где его искать на win7. Кому несложно - сделайте пожалуйста мне вторую лабку, и объясните что к чему! Если можно - прокоментить все вплоть до подключаемых библиотек, типа кто зачем и откуда. (лабка в...
C++ Задача: найти трехзначное число х http://www.cyberforum.ru/cpp-beginners/thread1146003.html
У трехзначном числе х зачеркнули его вторую цифру. Когда к образованному при этом двухзначному числу слева приписали вторую цифру числа х, то получилось число 546. Найти число х
C++ Исправить ошибки в структуре student #include "stdafx.h" #include <iostream> #include <string> using namespace std; struct STUDENT { char name; int group; int marks; подробнее

Показать сообщение отдельно
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
12.04.2014, 14:24     Поток из не статического метода
Блин, кидаете куски кода, которые по сути к делу отношения имеют мало.
Ну попытаюсь восстановить.

Предполагаю, что исходно было так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
#include <pthread.h>
 
struct Client
{
    static void* StartRoutine(void*)
    {
        std::cout << "Client::StartRoutine" << std::endl;
        return NULL;
    }
};
 
int main()
{
    pthread_t thread;
    pthread_create(&thread, NULL, Client::StartRoutine, NULL);
 
    pthread_join(thread, NULL);
    std::cout << "Joined" << std::endl;
}
Внезапно StartRoutene перестал быть статичным методом.
Вопрос: где в последнем коде объект, для которого будет вызваться этот метод в потоке?

Естественно, с сишной точки зрения сигнатура нестатичного метода отличается от статичного - первым аргуметом неявно передается указатель на объект, для которого вызывается метод. Т.е. если в моем примере StartRoutine сделать нестатичным, то он будет эквивалентен чему-то вроде
C++
1
void* _Client_StartRoutine(Cliient* const this, void*)
Очевидно, сигнатура отличается от той, что требует функция pthread_create. Поэтому я и говорю, что нужно сделать дополнительный статичный метод, которому в качестве аргумента можно будет явно передать this.
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 <iostream>
 
#include <pthread.h>
 
struct Client
{
    void* StartRoutine(void*)
    {
        std::cout << "Client::StartRoutine" << std::endl;
        return NULL;
    }
 
    static void* StartRoutineHelper(void* arg)
    {
        Client* const obj = reinterpret_cast<Client* const>(arg);
        return obj->StartRoutine(NULL);
    }
};
 
int main()
{
    Client client;
    pthread_t thread;
    pthread_create(&thread, NULL, Client::StartRoutineHelper, &client);
 
    pthread_join(thread, NULL);
    std::cout << "Joined" << std::endl;
}
 
Текущее время: 13:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru