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

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

Восстановить пароль Регистрация
 
Eraston
 Аватар для Eraston
53 / 10 / 2
Регистрация: 09.09.2014
Сообщений: 123
19.07.2015, 21:58     Асинхронные очереди Glib #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 минут
///
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2015, 21:58     Асинхронные очереди Glib
Посмотрите здесь:

C++ Очереди
Очереди. Каким образом считать две очереди из одного текстового файла? C++
C++ Разработать программу формирования очереди, содержащей целые числа, и упорядочивания по возрастанию элементов в этой очереди.
Объединить две очереди в одну, как создать две очереди C++
C++ править код (создание очереди и удаление элемента очереди по усмотрению пользователя)
Очереди (С++) C++
C++ Литература. Синхронные и асинхронные автоматы
Glib.h в Windows C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Eraston
 Аватар для Eraston
53 / 10 / 2
Регистрация: 09.09.2014
Сообщений: 123
21.07.2015, 00:14  [ТС]     Асинхронные очереди Glib #2
Неужели никто не поможет? Модеры, может тему переместить надо?
Yandex
Объявления
21.07.2015, 00:14     Асинхронные очереди Glib
Ответ Создать тему
Опции темы

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