<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: обвязка для boost::thread</title>
    <link>https://opennet.me/openforum/vsluhforumID9/6793.html</link>
    <description>Здравствуйте!&lt;br&gt;Я пытаюсь написать некий класс модуля, который по инициализации или по вызову метода run() начинал исполнение в отдельном потоке. При уничтожении объекта поток должен быть воссоединен с материнским. На данный момент я пришел к такой вот реализации (которая собственно не работает, иначе бы я вопросы тут не задавал =) ):&lt;br&gt;&lt;br&gt;class ThreadedModule&lt;br&gt;&#123;&lt;br&gt;    public:&lt;br&gt;        ThreadedModule() &#123;&#125;&lt;br&gt;        ~ThreadedModule()&lt;br&gt;        &#123;&lt;br&gt;            if (_thrd)&lt;br&gt;            &#123;&lt;br&gt;                _thrd-&amp;gt;join();&lt;br&gt;                delete _thrd;&lt;br&gt;            &#125;&lt;br&gt;        &#125;&lt;br&gt;&lt;br&gt;        void run()&lt;br&gt;        &#123;&lt;br&gt;            this-&amp;gt;code();&lt;br&gt;            _thrd = new boost::thread(_run(this));&lt;br&gt;        &#125;&lt;br&gt;        &lt;br&gt;        virtual void code()&lt;br&gt;        &#123;&lt;br&gt;            std::cout &amp;lt;&amp;lt; &quot;hello from ThreadedModule::code()&#092;n&quot;;&lt;br&gt;        &#125;&lt;br&gt;&lt;br&gt;    private:&lt;br&gt;        boost::thread *_thrd;&lt;br&gt;        struct _run&lt;br&gt;        &#123;&lt;br&gt;            _run (ThreadedModule *th) : th(th) &#123;&#125;&lt;br&gt;            void operator()()&lt;br&gt;            &#123;&lt;br&gt;                th-&amp;gt;code();</description>

<item>
    <title>обвязка для boost::thread (xhook)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/6793.html#6</link>
    <pubDate>Fri, 28 Sep 2007 20:52:42 GMT</pubDate>
    <description>&amp;gt;Я уже говорил что this - указатель на базовый класс, а тебе &lt;br&gt;&amp;gt;нужен указатель на потомка. &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;посмотри что выдаст эта функция: &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;virtual void code() &lt;br&gt;&amp;gt;&#123; &lt;br&gt;&amp;gt;   std::cout &amp;lt;&amp;lt; reinterpret_cast&amp;lt; unsigned int &amp;gt;(this) &amp;lt;&amp;lt; &apos;&#092;n&apos;;&lt;br&gt;&amp;gt;   std::cout &amp;lt;&amp;lt; &quot;hello from ThreadedModule::code()&#092;n&quot;; &lt;br&gt;&amp;gt;&#125; &lt;br&gt;&lt;br&gt;все тот же пойнтер.&lt;br&gt;</description>
</item>

<item>
    <title>обвязка для boost::thread (sascha)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/6793.html#5</link>
    <pubDate>Fri, 28 Sep 2007 15:05:15 GMT</pubDate>
    <description>Я уже говорил что this - указатель на базовый класс, а тебе нужен указатель на потомка.&lt;br&gt;&lt;br&gt;посмотри что выдаст эта функция:&lt;br&gt;&lt;br&gt;virtual void code()&lt;br&gt;&#123;&lt;br&gt;   std::cout &amp;lt;&amp;lt; reinterpret_cast&amp;lt; unsigned int &amp;gt;(this) &amp;lt;&amp;lt; &apos;&#092;n&apos;;&lt;br&gt;   std::cout &amp;lt;&amp;lt; &quot;hello from ThreadedModule::code()&#092;n&quot;;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>обвязка для boost::thread (xhook)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/6793.html#4</link>
    <pubDate>Fri, 28 Sep 2007 14:30:47 GMT</pubDate>
    <description>спасибо за совет по поводу bind, что-то я про него забыл. теперь оно выглядит немного стройнее:&lt;br&gt;&lt;br&gt;class ThreadedModule&lt;br&gt;&#123;&lt;br&gt;public:&lt;br&gt;ThreadedModule() &#123;&#125;&lt;br&gt;~ThreadedModule()&lt;br&gt;&#123;&lt;br&gt;if (_thrd)&lt;br&gt;&#123;&lt;br&gt;_thrd-&amp;gt;join();&lt;br&gt;delete _thrd;&lt;br&gt;&#125;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;void run() &lt;br&gt;&#123; &lt;br&gt;std::cout &amp;lt;&amp;lt; reinterpret_cast&amp;lt; unsigned int &amp;gt;(this) &amp;lt;&amp;lt; &apos;&#092;n&apos;;&lt;br&gt;this-&amp;gt;code(); &lt;br&gt;_thrd = new boost::thread(boost::bind(&amp;ThreadedModule::_run, this));&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;&lt;br&gt;virtual void code()&lt;br&gt;&#123; &lt;br&gt;std::cout &amp;lt;&amp;lt; &quot;hello from ThreadedModule::code()&#092;n&quot;; &lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;private:&lt;br&gt;boost::thread *_thrd;&lt;br&gt;static void _run(ThreadedModule *tm)&lt;br&gt;&#123;&lt;br&gt;std::cout &amp;lt;&amp;lt; reinterpret_cast&amp;lt; unsigned int &amp;gt;(tm) &amp;lt;&amp;lt; &apos;&#092;n&apos;;&lt;br&gt;tm-&amp;gt;code();&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;&#125;;&lt;br&gt;&lt;br&gt;вывод:&lt;br&gt;3215966904&lt;br&gt;hello from MyThreadedModule::code()&lt;br&gt;3215966904&lt;br&gt;hello from ThreadedModule::code()&lt;br&gt;&lt;br&gt;одна и та же лажа... надо полностью принцип менять. хотя данное поведение сего кода мне кажется полной чушью&lt;br&gt;</description>
</item>

<item>
    <title>обвязка для boost::thread (sascha)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/6793.html#3</link>
    <pubDate>Fri, 28 Sep 2007 12:20:57 GMT</pubDate>
    <description>1. смотри boost::bind :&lt;br&gt;  new boost::thread(boost::bind(&amp;ThreadedModule::run, this);&lt;br&gt;  так мы отказываемся от использования struct _run&lt;br&gt;2. для полиморфизма мы должны передавать правильный указатель на класс в нашем случае this ??.&lt;br&gt;3. join в деструкторе - плохое решение.&lt;br&gt;</description>
</item>

<item>
    <title>обвязка для boost::thread (xhook)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/6793.html#2</link>
    <pubDate>Fri, 28 Sep 2007 11:25:52 GMT</pubDate>
    <description>&amp;gt;Попробуй сделать хотябы один метод code не inline &lt;br&gt;&lt;br&gt;пробовал, никакого эффекта&lt;br&gt;</description>
</item>

<item>
    <title>обвязка для boost::thread (Мимо проходящий)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/6793.html#1</link>
    <pubDate>Fri, 28 Sep 2007 11:17:57 GMT</pubDate>
    <description>Попробуй сделать хотябы один метод code не inline&lt;br&gt;</description>
</item>

</channel>
</rss>
