С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Eraston
53 / 10 / 2
Регистрация: 09.09.2014
Сообщений: 127
#1

Асинхронные очереди Glib - C++

19.07.2015, 21:58. Просмотров 438. Ответов 1
Метки нет (Все метки)

Всем привет!
Не уверен в своём навыке понимания, решил воспользоваться библиотекой glib.
Потребовалась реализация передачи сообщений от одного потока к другому.
Собственно, при рассинхроне потоков (имитация более длительной работы одного), выдаются одинаковые пары чисел для каждой итерации и с TTS и с TTR.

Может, плохо читал документацию, но конкретно, я так и не понял, что представляет из себя GAsyncQueue, что с ним происходит при вызове функций ..._push, ..._pop, и правильно ли удалил его, если его вообще надо удалять. И в каких случаях нужна функция g_async_queue_ref.

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
GThread *tts, *ttr;
GStaticMutex ttm = G_STATIC_MUTEX_INIT;
bool ttb = 0;
GAsyncQueue *ttq = 0;
void th_test_sender(){
    bool b = 1; int iter = 0;
    for(;b;){
        g_static_mutex_lock( &ttm );
        if( !ttb ) b = ttb;
        g_static_mutex_unlock( &ttm );
        int r = randi( 0, 9 );
        char* c = new char[sizeof(iter)+sizeof(r)];
        gpointer a = c;
        memcpy_s( c, sizeof(iter), &iter, sizeof(iter) );
        memcpy_s( &c[sizeof(iter)-1], sizeof(r), &r, sizeof(r) );
        plog("< TTS: %4d %d", iter, r );
        iter++;
        g_async_queue_push( ttq, a );
        Sleep( 1000 );
    }
}
void th_test_reciever(){
    bool b = 1; int iter = 0;
    for(;b;){
        g_static_mutex_lock( &ttm );
        if( !ttb ) b = ttb;
        g_static_mutex_unlock( &ttm );
        gpointer a = g_async_queue_pop( ttq );
        char *c = (char*)a;
        int r;
        memcpy_s( &r, sizeof(r), &c[sizeof(iter)-1], sizeof(r) );
        plog("< TTR: %4d %d", iter, r );
        iter++;
        Sleep( 2000 );
    }
}
//...main...
//...
        strcheck( cmd, "async" ){
            strcheck( cmd, "1" ){
                g_static_mutex_lock( &ttm );
                ttb = 1;
                g_static_mutex_unlock( &ttm );
                tts = g_thread_create( (GThreadFunc)th_test_sender, 0, 1, 0 );
                ttr =g_thread_create( (GThreadFunc)th_test_reciever, 0, 1, 0 );
                ttq = g_async_queue_new();
            }
            strcheck( cmd, "0" ){
                g_static_mutex_lock( &ttm );
                ttb = 0;
                g_static_mutex_unlock( &ttm );
                g_thread_join( tts );
                g_thread_join( ttr );
                tts = ttr = 0;
                g_async_queue_unref( ttq );
            }
//...
Добавлено через 23 часа 38 минут
///
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2015, 21:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Асинхронные очереди Glib (C++):

Glib.h в Windows - C++
Доброго времени суток! Столкнулся с маленькой проблемой: не компилируется программа с библиотекой glib.h в windows (MinGW). Под debian...

Очереди. Каким образом считать две очереди из одного текстового файла? - C++
Здравстуйте. В задании первый пункт состоит в том, что нужно сформировать две очереди по n элементов с помощью считки данных из...

Найдите суммарную длину строк, принадлежащих очереди, кроме первой строки очереди - C++
Создать очередь строковых значений, для реализации используя односвязные списки.Реализовать операции добавления (enqueue) и удаления...

Извлечь из очереди начальные элементы и вывести их значения и новые адреса начала и конца очереди - C++
Дано число N (&gt; 0) и указатели P1 и P2 на начало и конец непустой очереди. Извлечь из очереди N начальных элементов и вывести их значения...

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

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

1
Eraston
53 / 10 / 2
Регистрация: 09.09.2014
Сообщений: 127
21.07.2015, 00:14  [ТС] #2
Неужели никто не поможет? Модеры, может тему переместить надо?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2015, 00:14
Привет! Вот еще темы с ответами:

Необходимо протестировать костыль. Конвертирование Glib::ustring в sf::String - C++
Есть строка Glib::ustring, пытался её конвертировать в sf::String, и вроде бы всё работает без особых костылей, но как добрался до...

Литература. Синхронные и асинхронные автоматы - C++
Поделитесь пожалуйста литературой. Необходимо написать программу работы синхронного автомата, и еще асинхронного, в c++ к понедельнику, а я...

Очереди. Дан массив. Создать две очереди, первая должна содержать все нечетные, а вторая - все четные - C++
Очереди. Дан массив. Создать две очереди, первая должна содержать все нечетные, а вторая - все четные числа из исходного набора; порядок...

Объединить две очереди в одну, как создать две очереди - C++
&quot;Объединить две очереди в одну, чередуя элементы первой и второй очереди. Основной вопрос как создать две очереди? точнее даже три, в...


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

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

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