タグ

c++に関するkyouzontのブックマーク (43)

  • Boost.Asio postとdispatchの違い - Faith and Brave - C++で遊ぼう

    Boost.Asioのio_serviceには、post()とdispatch()というほぼ同じことをする関数が用意されています。 以下のブログでわかりやすく解説されていたので、それを見ていくことにします。 To post or to dispatch? - This Thread まず、io_serviceを複数スレッドで動作させます。 それと、最初にメインスレッドのIDを出力しておきます。 std::cout << boost::this_thread::get_id() << std::endl; asio::io_service io_service; asio::io_service::work work(io_service); boost::thread_group group; const int count = 3; for (int i = 0; i < count;

    Boost.Asio postとdispatchの違い - Faith and Brave - C++で遊ぼう
  • boost.asioの非同期IOのしくみ - ぬうぱんの備忘録

    なにがあった 一個前のエントリで同期通信のブロッキングがウンタラカンタラって言って結局非同期通信することに落ち着いたので、非同期通信がどうなってるのかをメモ 基的な流れとか おおよそ次の3ステップ メインスレッドでio_serviceに送受信バッファとハンドラを登録(post) io_serviceは登録されたハンドラを処理する(dispatch) 送受信が完了すると登録したハンドラが呼び出される 補足すると メインスレッドから仕事を投げて子スレッドで仕事を処理するイメージ。 2はio_service::run()内のメッセージループで行われる。 送信にしても受信にしてもハンドラが呼び出されるまでは送受信が終了していないという事なので、バッファを有効にしておく必要がある。 メッセージループの開始と終了 開始と終了が割と面倒。というのも ハンドラを処理するメッセージループはio_servi

    boost.asioの非同期IOのしくみ - ぬうぱんの備忘録
  • NO!と言えるようになりたい

    foo.m_bar と書くべきところを,foo.bar と書いていたら,foo.m_bar なんじゃないのと指摘してくれた.なんだこれは.たまげたなあ.凄い(確信). こんなかんじで書いていると, class ssl_info { public: ptr_cdpi_ssl m_client; }; void func() { get_ssl_obj(info.client, b1); } このようにエラーを出すのだ. /home/ytakano/program/c/catenaccio_dpi/src/cdpi_mongo.cpp:394:22: error: no member named 'client' in 'my_event_listener::ssl_info'; did you mean 'm_client'? get_ssl_obj(info.client, b1); ^~

    NO!と言えるようになりたい
  • C++, boost::thread : スレッドの生成と実行

    C/C++でスレッドを扱う場合は、プラットフォームによって使用するライブラリが違います。 Windows なら Windows API の thread で、 UNIX や Linux 系ならば pthread ライブラリ等を使用します。プラットフォーム依存するコードは可搬性に難があり、解決策の1つとしてプリコンパイルで依存部分をプラットフォームに合わせたライブラリを選択してコンパイルする方法があります。 boost ライブラリの boost::thread は、上のような処理をラップして共通のインターフェイスとして実装されています。 boost/thread.hppの一部 #if defined(BOOST_THREAD_PLATFORM_WIN32) #include <boost/thread/win32/thread.hpp> #elif defined(BOOST_THREAD_

    C++, boost::thread : スレッドの生成と実行
  • int/doubleを文字列に変換する際の速度など - y_tagの日記

    C++でintやdoubleなどの数を文字列(charの配列もしくはstd::string)にしたい時、もしくはその逆で文字列をintやdoubleにしたい時がある。一般的にそのような処理はファイル入出力などと合わせて行われるため、それほど速度を気にすることはなく、むしろ安全な処理を選択することが多いと思う。 そんなわけで、これまではC++のstreamやboost::lexical_castを使っていたのだけれど、これらの時間がかかる処理より速いであろうsnprintfやatoi/strtol、strtodなどとどれほど差があるのかを調べてみた。 以下がざっと書いた速度計測結果。実行は仮想マシン(VMWare)上のUbuntu 11.10で行った。何度か測定したところ細かい誤差はあったが、ある程度の傾向は見えたように思う。単純にintをループ内でインクリメンタルする処理を比較対象とした。

    int/doubleを文字列に変換する際の速度など - y_tagの日記
  • Google Sites: Sign-in

    Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode

  • いやなブログ: 配列操作の比較表: Ruby, Python, JavaScript, Perl, C++

    配列操作の比較表: Ruby, Python, JavaScript, Perl, C++ プログラムを書いていると、他のプログラミング言語の記憶とごっちゃになって、「配列の後ろに要素を追加するのは push だっけ、 append だっけ」などと混乱することがあります。特に Ruby, Python, JavaScript はコードの書き方が似ているので、この問題が起きがちです。 そこで、備忘録として、 Ruby, Python, JavaScript, Perl, C++ の配列操作の比較表を作りました。一番慣れている Ruby を基準にしています。間違いなどがあったらご指摘いただけると助かります。他の言語のもあるといいなあ。 Ruby (Array) Python (list) JavaScript (Array) Perl (@) C++ (std::vector)

  • Log4J徹底解説~Log4cxxと小物ツール

    目次 Log4cxx のインストール Log4cxx のテスト Log4cxx を使った小物ツール swatch で「合わせて一!」 Log4cxx のインストール さて、今度は Log4cxx である。Log4cxx は Log4JC++ 版ライブラリであり、基的に Log4J と同様に動作する。log4j.properties や log4j.xml のような設定ファイルもほとんどそのまま動作するのである。テストしたのは log4cxx-0.9.7 だが、これは多少新しめのコンパイル環境を要求する。また Java と違って一部機能は標準ライブラリにないために、コンパイル時にオプションで適当なライブラリを指定してやらなくては有効にならない。 コンパイルは次のようにする。 % ./autogen.sh % ./configure % make % make check % su

  • boost Asio 概要

    Boost.Asio概要 翻訳は自分の勉強のために行います.とりあえず意味がわかればいいやという感じで進めます.訳せないところは飛ばします. そういった意味で不正確な訳なことをご了承下さい. http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/overview.html 1. Boost.Asioの原理原則 大部分のプログラムは、外の世界と何らかの方法でやりとりをします。それは、ファイルを通じて、ネットワークを通じて、シリアルケーブルを通じて、もしくは、コンソールを通じて、です。しばしば、ネットワークの場合、I/O命令の完了までに長い時間がかかる場合があります。これは、アプリケーションの開発者にとって、とりわけ挑戦となります。 Boost.Asioはこれらの長い実行時間のかかる操作を扱います。スレッドや明示的なロックなしにです

  • gdb + core 解析 - utahta blog

    core ファイルを解析するメモ。 下準備 まず意図的に SEGV させるコードを書く。 $ vi a.cpp #include class CPrint { private: int m_number; char *m_str; public: CPrint() : m_number(10), m_str(NULL) {} ~CPrint() {} void print(){ // ここで SEGV る予定 printf( "%d, %c\n", m_number, m_str[0] ); } }; int main() { CPrint p; p.print(); return 0; } 続けて core を出力させる設定。環境は Linux CentOS 5。 $ ulimit -c unlimited core dumped 下準備で作成したソースコードをコンパイル。-g を忘れず

    gdb + core 解析 - utahta blog
    kyouzont
    kyouzont 2012/06/03
    coreファイルの解析入門。
  • 404 Not Found

    kyouzont
    kyouzont 2012/05/04
    volatile変数は常にメモリにアクセスすることから、そうでないものよりパフォーマンスに劣るようである。
  • Boost.Asioまとめ(1)::io_service - yutopp's blog

    Boost Advent Calndar 2011に恐縮ですが参加させて頂きました。15日目です。 最初はBoost.Asioについてまとめるぞーと意気込んでいたものの変に長くなってしまったのでBoost.Asioの中のio_serviceに絞ったためこんなタイトルに成り申した。 Boost.Asioとは 主にネットワークのI/Oのような時間のかかってしまう処理を非同期的かつ簡潔に扱えるようにした便利なライブラリです。 ネットワークを中心に、シリアルポート、タイマー、シグナルのハンドリングなども扱えます。 と、いうわけでio_serviceです。 Windows環境にてVC++10、Boost1.48.0を用いています。 io_service 全てはこのクラスに始まり、このクラスに終わります。 各OSの提供するI/O制御への橋渡しをしてくれるもので、Asioの提供するIOサービス(dead

    Boost.Asioまとめ(1)::io_service - yutopp's blog
  • boost::asioライブラリに複数の io_service::run の正しい呼び出し方 - 雷鳴の日記

    幾日の前に、私はboost::asioを遊んでた。こういうコードを書いた #include #include #include #include using std::cout; using std::endl; using namespace boost; using namespace boost::asio; io_service ioserv; mutex m; volatile int c = 0; void add() { lock_guard g(m); ++c; } int main() { thread t1(bind(&io_service::run, ref(ioserv))); thread t2(bind(&io_service::run, ref(ioserv))); for(int i = 0; i < 655360; ++i) ioserv.post(&ad

    boost::asioライブラリに複数の io_service::run の正しい呼び出し方 - 雷鳴の日記
    kyouzont
    kyouzont 2012/04/29
    UltraMonkey-L7ではpoll()を使っているが、この問題は大丈夫だろうか。
  • [C++]楽々TCPサーバ

    塵も積もれば山 目次 ホーム 連絡をする RSS Login Blog 利用状況 投稿数 - 216 記事 - 0 コメント - 7622 トラックバック - 60 ニュース C++とかC#とか数学ネタを投下していく予定です。 [その他のページ] 日々の四方山話を綴った日記出水の日記帳 書庫 2011年12月 (2) 2011年8月 (1) 2011年7月 (1) 2011年1月 (2) 2010年12月 (2) 2010年11月 (2) 2010年10月 (5) 2010年8月 (1) 2010年7月 (1) 2010年5月 (1) 2010年4月 (2) 2010年2月 (8) 2010年1月 (2) 2009年12月 (2) 2009年10月 (5) 2009年9月 (3) 2009年8月 (3) 2009年7月 (5) 2009年6月 (12) 2009年5月 (6) 2009年4

  • はてなブログ | 無料ブログを作成しよう

    来年も作りたい!ふきのとう料理を満喫した 2024年春の記録 春は自炊が楽しい季節 1年の中で最も自炊が楽しい季節は春だと思う。スーパーの棚にやわらかな色合いの野菜が並ぶと自然とこころが弾む。 中でもときめくのは山菜だ。早いと2月下旬ごろから並び始めるそれは、タラの芽、ふきのとうと続き、桜の頃にはうるい、ウド、こ…

    はてなブログ | 無料ブログを作成しよう
    kyouzont
    kyouzont 2012/04/29
    scoped_lockについて。
  • 参照とポインタ

    この文章はプログラマでもプログラミング言語の専門家でもないただのプログラミング好きの私が適当に書きつづったものです。よってこの文章には正しい箇所もあるでしょうが、間違っている箇所もかなりあるはずです。ご指摘いただけたらと思います。また、この文章を読んでも内容を鵜呑みにしないでください。鵜呑みにした結果何か起きても知りません。 "諸悪の根元"-ポインタ Cの特徴の1つとして、また初心者が必ずつまずく(*)とされる難所としてポインタがあげられるわけだが、ポインタはどうも最新流行のプログラミング手法の中では諸悪の根元として忌み嫌われているようだ。 (*) 自慢するわけではないのだが、私は別にポインタでつまずいた記憶はない。もちろん、効果的な使い方などはその後いろいろなコードを読んでいく中で身に付いていったわけだが。 ポインタは確かに諸刃の剣である。非常に便利な反面、危険でもある。例えば次のような

    kyouzont
    kyouzont 2012/04/22
    参照とポインタの使い分けについて。一つの参考として。
  • [Boost-users] [asio] async_read and 100% CPU

    kyouzont
    kyouzont 2012/03/13
    UltraMonkey-L7で発生している問題と関わりがあるか?
  • Boost.Regexを使ってみる(1)

    今回はMinGW環境下でBoost.Regexを使ってみます。 Boost.Regexはテンプレートだけではなく、ライブラリを必要としますのでリンクでregexのライブラリをリンクする必要があります。 コンパイルとリンク ヘッダファイルのインクルード Boost.Regex を利用する場合は、boost/regex.hpp をインクルードする必要があります。 ソースに以下のように記述します。 #include <boost/regex.hpp> インクルードパスの設定 コンパイルする際、インクルードパスを設定します。 「Boostのインストール」で説明した方法でインストールした場合、 インストール先のフォルダ下のinclude\boost-1_33_1\boost の下にヘッダファイルが生成されています。 Boostのヘッダファイルの #include の記述は #include <boo

  • Google Sites: Sign-in

    Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode

    kyouzont
    kyouzont 2011/12/27
    std::find_ifの使い方とあわせて書いてあるので参考になります
  • クラス内メソッド遷移からswitch~caseを消すMethodExecテンプレート

    ホーム < ゲームつくろー! < クラス構築編 クラス内メソッド遷移からswitch~caseを消すMethodExecテンプレート 例えばRPGの戦闘シーンを演出するCBattleクラスがあったとします。このクラスはシーン演出のために細かな遷移があり、それをメソッド呼び出して解決しているとしましょう。実装例はこんな感じです: class CBattle { public: void exec();      // バトルエントリ private: void init();          // バトル初期化 void loadResource();  // リソースロード void setPlayerMenu(); // プレイヤーの行動選択 void setEnemyMenu();  // 敵の行動選択 void startBattle();   // バトルスタート void ca