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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Разобраться в вопросе работы ссылок http://www.cyberforum.ru/cpp-beginners/thread1501152.html
здравствуйте, в связи с тем, что, как оказалось, у меня проблемы с пониманием ссылок, есть вопросы... есть код: void f1(int a) { } void f2(int& a) { } void f3(const int& a) { } int g() { int b = 2; return b; } f1(g()); f2(g()); // ошибка, не может конвертировать int в int& f3(g());
C++ Как считывать данные из строки? делаю программу работающую с ip-адресами. ввожу в консоли адрес через точку. нужно перезаписать данные из строки в массив. провожу отбор посимвольно(если встречается точка то перескакиваем), все делаю в цикле. после первого прохода цикла программа не заходит в if. подскажите с чем это может быть связано http://www.cyberforum.ru/cpp-beginners/thread1501144.html
C++ Нажать кнопку на сайте
Предположим я нахожу окно где находится кнопка таким образом: hwnd = FindWindow("Chrome_WidgetWin_1","Новый текстовый документ.html - Google Chrome");//Окно Хрома hwnd2 =FindWindowEx(hwnd,0,L"Chrome_RenderWidgetHostHWND",NULL);//Вкладка с кнопкой И как мне можно нажать на эту кнопку?В spy++ нету ее,т.к. это html страница
Как преобразовать время из строки в Unix Time? C++
Получаю "Sat, 18 Jul 2015 19:56:37 +0300" Знаю что можно strptime или бустом, но какой шаблон для такого времени?
C++ Пояснить работу программы, которая складывает элементы введённого числа между собой http://www.cyberforum.ru/cpp-beginners/thread1501086.html
Вот нашёл программу которая слаживает элементы введённого числа между собой.Я не могу понять, как эта программа работает.Кто понимает закоментируйте возле строк для чего они предназначены. #include <iostream> using namespace std; int main() { int x,k,s=0; cin>>x; do{
C++ Элемент-функция length() возвращает количество символов Здравствуйте. void GradeBook::setCourseName(string name) { if (name.length() <= 25) // если не более 25 символов courseName = name; // сохранить название курса в объекте "Параметр name является объектом string, поэтому вызов name.length() возвращает число символов в name." Проясните, пожалуйста, этот кусок. Разве значение name не затирается возвращаемым значением? подробнее

Показать сообщение отдельно
Eraston
 Аватар для Eraston
53 / 10 / 2
Регистрация: 09.09.2014
Сообщений: 123
19.07.2015, 21:58     Асинхронные очереди Glib
Всем привет!
Не уверен в своём навыке понимания, решил воспользоваться библиотекой 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 минут
///
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru