"C with Classes"
1610 / 1383 / 518
Регистрация: 16.08.2014
Сообщений: 5,752
Записей в блоге: 1
1

Thread: можно ли делать так, как в заданном коде и если нет, то почему?

21.04.2017, 10:22. Показов 1089. Ответов 8
Метки нет (Все метки)

Всем привет. можно ли так делать? Если нет то почему. Спасибо.
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
34
35
#include <iostream>
#include <thread>
#include <chrono>
 
class Test
{
public:
    void Handler(int i)
    {
        std::thread thread(&Test::DelayShow, this, 1);
        thread.detach();
    }
 
private:
    void Show(int i)
    {
        std::cout << "Show(" << i << ')'
            << std::endl;
    }
    void DelayShow(int i)
    {
        std::this_thread::sleep_for(std::chrono::seconds(5) );
        Show(i);
    }
};
 
int main(int argc, char* argv[] )
{
    Test* t = new Test();
    t->Handler(5); delete t;
 
    std::this_thread::sleep_for(std::chrono::seconds(5) );
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2017, 10:22
Ответы с готовыми решениями:

Нужно изменить высоту div с id wrap. Почему если записать вместо tmp просто '855px', все работает, а так нет?
Функция вызывается в обработчике события onload body. alert(tmp) выводит '855px'. function...

Как в нижеприведенном коде сделать так, чтобы макрос срабатывал каждые 10 минут в заданном промежутке
Доброго времени суток! Ответьте на несколько вопросов по Application.OnTime: 1) Как в ниже...

методом неопред. коэфф. не получается, а если делать так(картинка ниже), так же не выходит. есть идеи?
∫(3x-1)dx/(x2+4)(x2+9); Сразу методом неопред. коэфф. не получается, а если делать так(картинка...

Как сделать так, что если файл существует return true, если нет - return false
Здравствуйте, я новичок в программировании. Мой вопрос очень прост: как сделать так, что если файл...

8
803 / 530 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
21.04.2017, 10:25 2
Цитата Сообщение от _stanislav Посмотреть сообщение
Thread
читай со слова thread
0
Любитель чаепитий
3734 / 1793 / 563
Регистрация: 24.08.2014
Сообщений: 5,998
Записей в блоге: 1
21.04.2017, 10:48 3
и что смущает?
что main завершится раньше, чем Show? используйте condition_variable.
https://habrahabr.ru/post/182610/
https://habrahabr.ru/post/182626/
не знаю, что там стандарт на этот счёт говорит, но по идее программа завершится, когда выйдешь из main.
1
"C with Classes"
1610 / 1383 / 518
Регистрация: 16.08.2014
Сообщений: 5,752
Записей в блоге: 1
21.04.2017, 10:57  [ТС] 4
GbaLog-, смущает то что объект уничтожается, а работа с ним продолжается, или все нормально там. this уже невалидным не может стать в такой ситуации?
0
nd2
3433 / 2812 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
21.04.2017, 11:12 5
Лучший ответ Сообщение было отмечено _stanislav как решение

Решение

Цитата Сообщение от _stanislav Посмотреть сообщение
или все нормально там
UB.
2
"C with Classes"
1610 / 1383 / 518
Регистрация: 16.08.2014
Сообщений: 5,752
Записей в блоге: 1
21.04.2017, 11:43  [ТС] 6
nd2, я догадывался

Добавлено через 5 минут
nd2,
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
34
35
36
37
38
39
40
41
#include <iostream>
#include <thread>
#include <chrono>
 
class Test
{
public:
    void Handler(int i)
    {
        thread = std::thread(&Test::DelayShow, this, 1);
    }
    ~Test()
    {
        for (size_t i = 0; i < 10; i++)
            std::this_thread::sleep_for(std::chrono::seconds(2) );
    }
 
private:
    void Show(int i)
    {
        std::cout << "Show(" << i << ')'
            << std::endl;
    }
    void DelayShow(int i)
    {
        std::this_thread::sleep_for(std::chrono::seconds(5) );
        Show(i);
    }
 
    std::thread thread;
};
 
int main(int argc, char* argv[] )
{
    Test* t = new Test();
    t->Handler(5); delete t;
 
    std::this_thread::sleep_for(std::chrono::seconds(5) );
 
    return 0;
}
а так можно делать?

Добавлено через 9 минут
в деструкторе ждать максимум 20 секунд, если поток не завершится вызвать деструктор std::tread.
0
nd2
3433 / 2812 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
21.04.2017, 12:21 7
Цитата Сообщение от _stanislav Посмотреть сообщение
а так можно делать?
Поток, у тебя, и не отсоединён, и не присоединён, деструктор thread вызовет terminate():
0
Любитель чаепитий
3734 / 1793 / 563
Регистрация: 24.08.2014
Сообщений: 5,998
Записей в блоге: 1
21.04.2017, 12:34 8
Цитата Сообщение от nd2 Посмотреть сообщение
UB.
а почему, если не секрет?
просто в теме потоков я профан ещё больше, чем в остальном.
0
nd2
3433 / 2812 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
21.04.2017, 13:56 9
Цитата Сообщение от GbaLog- Посмотреть сообщение
а почему, если не секрет?
...
Миниатюры
Thread: можно ли делать так, как в заданном коде и если нет, то почему?  
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2017, 13:56
Помогаю со студенческими работами здесь

Можно ли назначать значения Input.Axis? Если нет, то как можно сделать контроллер для андроид, используя две кнопки?
Можно ли назначать значения Input.Axis? Если нет, то как можно сделать контроллер для андроид,...

Как скачать игру если нет swf в исходном коде страницы?
Здравствуйте! Раньше(неск.лет назад) все было ок. Сейчас в исходном коде страниц отсутствуют файлы...

Сделать так, что если человек авторизован выводить одну форму, если нет - другую.
Надо сделать так, что если человек авторизован выводить одну форму, если нет другую, подскажите как...

Выяснить можно ли с поля (k,l) одним ходом ферьзя попасть на поле(m,n). Если нет, то выяснить, как это можно сделать за два хода
Поле шахмотной доски определяеся парой натуральных чисел, каждая из которых не превосходит восьми:...

Можно ли как-то восстановить БД, если нет резервных копий?
Нельзя ли восстановить базу из текущего файла бд, выбрав в задачах восстановить на определённую...

Объясните, почему так нельзя делать?
using namespace std; uint32_t foo(uint32_t c, uint32_t a, const vector&lt; uint32_t&gt; &amp; data) { ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru