crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику Andrew Selivanov ::: Спасибо сказали: 15 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
28.7.2009, 15:44 Помогите понять boost::thread
Я бы рекомендовал для начала изучить неплохие примеры из Thread: C:\boost\boost_1_37_0\libs\thread\example\

На третий вопрос отвечу кодом из примера про голодных философов (starvephil.cpp):
class thread_adapter
{
public:
    thread_adapter(void (*func)(void*), void* param)
        : _func(func), _param(param)
    {
    }
    void operator()() const { _func(_param); }
private:
    void (*_func)(void*);
    void* _param;
};


Привязываем потоки к конкретным объектам через thread_adapter и делаем join (join грубо говоря обозначает не убивать этот поток пока не завершаться присоединённые к нему потоки, у тебя эту роль играет вечный sleep())
    phil p[] = { phil(0), phil(1), phil(2), phil(3), phil(4) };
    boost::thread thrd_phil0(thread_adapter(&phil::do_thread, &p[0]));
    boost::thread thrd_phil1(thread_adapter(&phil::do_thread, &p[1]));
    boost::thread thrd_phil2(thread_adapter(&phil::do_thread, &p[2]));
    boost::thread thrd_phil3(thread_adapter(&phil::do_thread, &p[3]));
    boost::thread thrd_phil4(thread_adapter(&phil::do_thread, &p[4]));


    thrd_phil0.join();
    thrd_phil1.join();
    thrd_phil2.join();
    thrd_phil3.join();
    thrd_phil4.join();


Цитата
2) Как нормально приостановить поток средствами boost, не привязываясь к системному времени.

Насколько я помню никак

Цитата
1) Где и что я делаю не правильно. Почему блокируется основной поток? Или это просто доступ к самой консоли блокируется?


MinGW 3.4.5/Boost 1.37
Ничего нигде не блокируется.
Я обычно что то в этом духе делаю:
#include <iostream>
#include <boost/thread/xtime.hpp>
#include <boost/thread/thread.hpp>

//для SetConsoleCtrlHandler ...
#include <windows.h>

class MSK {
public:
    MSK() : is_running(false)
    {

    }

    void run()
    {
        is_running = true;
        while(is_running)
        {
            std::cout << "PnP run...\n";

            // приостанавливаем поток на 10 секунд
            boost::xtime xt;
            boost::xtime_get(&xt, boost::TIME_UTC);
            xt.sec += 10;
            boost::thread::sleep(xt);
        }
        std::cout << "[run] ok\n";
    }

    void stop()
    {
        is_running = false;
    }

    static void do_thread(void* param)
    {
        static_cast<MSK*>(param)->run();
    }

private:
    bool is_running;
};

class thread_adapter
{
public:
    thread_adapter(void (*func)(void*), void* param)
        : _func(func), _param(param)
    {
    }
    void operator()() const { _func(_param); }
private:
    void (*_func)(void*);
    void* _param;
};

MSK msk;

BOOL WINAPI stop_handler(DWORD ctrl_type)
{
    switch (ctrl_type)
    {
    case CTRL_C_EVENT:
    case CTRL_BREAK_EVENT:
    case CTRL_CLOSE_EVENT:
    case CTRL_SHUTDOWN_EVENT:
        std::cout << "waiting to stop...\n";
        msk.stop();
        return TRUE;
    default:
        return FALSE;
    }
}

int main()
{
    std::cout << "[start]\n";

    boost::thread msk_thrd(thread_adapter(&MSK::do_thread, &msk));

    SetConsoleCtrlHandler(&stop_handler, TRUE);

    msk_thrd.join();

    std::cout << "[stop]\n";

    return 0;
}
AD, igor_bogomolov,
28.7.2009, 13:25 сборка буста...
Цитата(AD @ 28.7.2009, 12:49) *
Прошу ткнуть на файл/файлы документации, где рассказано про сборку буста и подключение его к проекту? Заранее спасибо!

Вот например: http://www.boost.org/doc/libs/1_39_0/more/...rted/index.html там внизу справа для Windows или *Nix.
CygMing можно считать *Nix :)
AD,
22.7.2009, 12:29 Борьба с функцией mktime
Большая и любимая тема 8) здесь нужно вдумчиво читать описание функции: http://www.opengroup.org/onlinepubs/009695...ons/mktime.html

Цитата:
Цитата
The original values of the tm_wday and tm_yday components of the structure are ignored, and the original values of the other components are not restricted to the ranges described in <time.h>.


И важный момент с DST:
Цитата
A positive or 0 value for tm_isdst shall cause mktime() to presume initially that Daylight Savings Time, respectively, is or is not in effect for the specified time. A negative value for tm_isdst shall cause mktime() to attempt to determine whether Daylight Savings Time is in effect for the specified time.


То есть:
tm_isdst =  0 // DST нет
tm_isdst =  1 // DST есть
tm_isdst = -1 // определить есть ли DST для этого времени


Лично я нарывался на tm_isdst инициализированный нулём что вызывало косяк в час в определённое время года :)

Вообще функции группы gmtime/localtime/asktime лично я если и использую, то с осторожностью... ибо чревато.

Для штук сложнее (с timezone например) рекомендую Boost Time.
AD,
20.3.2009, 14:38 Boost thread - ограниченное количество потоков?
#include <stdio.h>
#include <windows.h>

DWORD CALLBACK ThreadProc(void*)
{
Sleep(INFINITE);
return 0;
}

int __cdecl main(int argc, const char* argv[])
{
int i;
for (i = 0; i < 100000; i++) {
  DWORD id;
  //HANDLE h = CreateThread(NULL, 0, ThreadProc, NULL, 0, &id);
    HANDLE h = CreateThread(NULL, 4096, ThreadProc, NULL,
               STACK_SIZE_PARAM_IS_A_RESERVATION, &id);
  if (!h) break;
  CloseHandle(h);
}
printf("Created %d threads\n", i);
return 0;
}


У меня 8643 потока...
Взято отсюда: http://blogs.msdn.com/oldnewthing/archive/.../29/444912.aspx

А нахрена столько...?
Iron Bug,
4.2.2009, 12:33 Книга на английском языке
Книги на английском я обычно в logobook.ru беру, вот раздел по Аэрокосмонавтике:
http://www.logobook.ru/prod_list.php?ftype...8%E8&page=1

Из недавно прочитанного
По алгоритмам в графике хорошая книга:
Computational Geometry Algorihtms and Applications (Mark de Berg et al)
Я со scribd.com качал ( регаться надо, но без проверки мыло было.. год назад)
http://www.scribd.com/doc/7619913/Computat...s-2d-Ed-De-Berg

Я там главой по пересечениям интервалов интересовался (interval trees) (глава 10 страница 211). А вообще там еще много чего интересного. Оглавление смотри :)

Как справочник по алгоритмам:
Introduction to Algorithms, Second Edition Cormen, Leiserson, Rivest
Где я ее надыбал не помню :huh:

Там точно хорошая глава по rb trees :)
AD,
16.1.2009, 17:38 Эргономичность продукта
Есть хорошая статья (не знаю есть ли перевод на русский) :unsure: не совсем к эргономике, скорее какой софт считать "достаточно хорошим".
The Challenge of "Good Enough" Software
http://www.di.ufpe.br/~hermano/cursos/calc...gh-software.htm
AD,
16.1.2009, 16:55 Способ конвертации имени элемента перечисления в строку
Можно еще вот так (подсмотрено на http://stackoverflow.com/questions/201593/...-enum-to-string)

содержимое файлика colours.def
X(Red, "red")
X(Green, "green")


ну и сам код)
enum Colours {
#define X(a, b) a,
#include "colours.def"
#undef X
    ColoursCount
};

char const* const colours_str[] = {
#define X(a, b) #b,
#include "colours.def"
#undef X
    0
};

int main()
{
    std::cout << colours_str[Green] << "\n";
    return 0;
}


Ну и про макросы обобщим:
# - в строку
#@ - в char
## - слепить
AD, kwisp,
21.10.2008, 9:10 Сценарий добавления источника БД
You can configure ODBC (Open Database Connectivity) data source names programmatically. This gives you flexibility to export data without forcing the user to explicitly use the ODBC Administrator or other programs to specify the names of data sources. This might, for example, enable your program to use the ODBC API (application programming interface) to export an .XLS file. To do this, use the SQLConfigDataSource() function

http://support.microsoft.com/kb/q110507/

Или воткнуть в реестр вот так:
http://support.microsoft.com/kb/q184608/
AD,
3.10.2008, 13:09 Что мы хотим видеть в САПР
Цитата(ЙаМайскЫйПчОЛ @ 2.10.2008, 22:58) *
Кто чем недоволен в существующих САПРах,
какими пользуется,
от каких блевать тошнит,
что хотим.?

Ну блевать тошнит от студенческих поделок (нет это не намек, это из личного опыта). IMHO проблема с этими сапрами в том, что каждый КАЖДЫЙ разработчик делает там все именно так как ему кажется правильным, это порождает несовместимость ничего ни с чем во первых, и необходимость индивидуального изучения каждого отдельного средства тьфу, проектантами. То есть нужны люди которые по-любому будут это использовать и давать регулярный feedback...

про тестирование
При глюке в САПРе баги будут прямо в изделии. Хорошо если это не самолет или спутник.

про симулятор
Это отдельная большая нетривиальная проблема для каждого конкретного САПРа, будь это тепловые задачи, деформация или еще что.

Короче IMHO чтобы добиться успеха с САПРом нужно решить:
а) кому это можно продать и есть мнение, что бажный самописный сапр пока как следует не намотает хорошую репутацию покупать люди не станут... тестироваться на живых юзерах может себе позволить только M$ :) все равно покупают...
б) где взять бабки, умножить эту сумму на 3-4 и подумать еще где взять бабки и продумать как вылазить если бабок не хватит.
в) отряд тестировщиков (пользователей)
г) отряд разработчиков рубящих в теме
д) ...

задолбался я писать, но может это поможет 8)
AD, ЙаМайскЫйПчОЛ,
14.8.2008, 8:50 Visuаl Studio vs Eclipse
Цитата(AD @ 12.8.2008, 15:48) *
Хоть я и люблю Visual Studio, но хотелось бы кое что похвальное об Eclipse! Я об этом узнал на своей работе: в Eclipse встраивается Subversion, за счет чего легче отслеживать версии, делать объединения и т.п!

P.S. Думаю, что Andrew Selivanov сможет об этом рассказать более полно!

Действительно, в Eclipse встраивается плагин под названием Subclipse (http://subclipse.tigris.org/), который позволяет вполне комфортно работать с SVN. Старые версии ставились unzip-ом, сейчас так делать не надо, пользуемся стандартным механизмом.
Устанавливается через Eclipse update (Help > Software Updates... > Available Software кликаем Add Site, добавляем http://subclipse.tigris.org/update_1.4.x ставим галку жмем Install...)
AD,
23.7.2008, 17:29 Проблема подключения драйвера ODBC
Вот тут люди говорят, что нужно попробовать через named pipe
http://support.microsoft.com/kb/265808
AD,
14.5.2008, 12:53 http://www.scribd.com
Вот например тут я накопал мануалы по DEC машинкам :)
http://www.scribd.com/groups/view/2794-dec...ent-corporation
Litkevich Yuriy,

RSS Текстовая версия Сейчас: 21.11.2024, 21:33