投稿数 - 388, コメント - 2169, トラックバック - 138

ファイバ考察 - その2

ファイバ考察 - その1 のコメント稍丼さんが教えてくれたのだが、SQL Server 2005 は今のところ「lightweight pooling」と「clr enabled」は排他的にしか使用できない。http://msdn2.microsoft.com/ja-jp/library/ms175193.aspx

じゃあこれは何だったんだ。できもしないなら CLR はファイバで動くからどうとか書かないでほしい(MSDN)。少なくとも SQL Server を絡めないでほしい。いや待て。もしかしたら、lightweight pooling が無効でも、clr enabled が有効ならファイバモードになるのだろうか?一応考察する価値はあるだろう。

まずは、どうってことない簡単な事だが普通にファイバを使う方法を紹介する。尚、ファイバ関連の API は Windows XP、2003、Vista と追加され続けているので、何も考えないでいると動作する OS を選んでしまうので注意。以下は殆ど全ての OS で動作するだろう。

#include <windows.h>
#include <stdio.h>
#include <tchar.h>
 
void CALLBACK Fiber2(void* lpParameter);
void CALLBACK Fiber3(void* lpParameter);
 
void* g_pFiber2;
void* g_pFiber3;
 
int _tmain(){
    // 現在のスレッドをファイバに変換
    ConvertThreadToFiber(NULL);
 
    // 新しいファイバを 2 つ作成
  
    g_pFiber2 = CreateFiber(0, Fiber2, NULL);
    if(!g_pFiber2){
        printf("ファイバ 2 の作成に失敗");
        return -1;
    }
 
    g_pFiber3 = CreateFiber(0, Fiber3, NULL);
    if(!g_pFiber3){
        printf("ファイバ 3 の作成に失敗");
        return -1;
    }
 
    // ファイバ 2 にスイッチ
    SwitchToFiber(g_pFiber2); 
 
    printf("ここには処理が来ない"); 
  
    return 0;
}
 
void CALLBACK Fiber2(void* lpParameter){
    printf("第 2 ファイバ開始\n"); 
  
    while(1){
        Sleep(1000);
        printf("第 2 ファイバの仕事\n");
        SwitchToFiber(g_pFiber3);
    }
}
 
void CALLBACK Fiber3(void* lpParameter){
    printf("第 3 ファイバ開始\n"); 
  
    while(1){
        Sleep(1000);
        printf("第 3 ファイバの仕事\n");
        SwitchToFiber(g_pFiber2);
    }
}

実行結果
第 2 ファイバ開始
第 2 ファイバの仕事
第 3 ファイバ開始
第 3 ファイバの仕事
第 2 ファイバの仕事
第 3 ファイバの仕事
第 2 ファイバの仕事
…(以下延々続く)

見て分かるように、ファイバを扱うには、まずスレッドをファイバに切り替える必要がある。ファイバの切り替えは SwitchToFiber で行う。それ以外は普通のスレッドと変わりなく扱う事が可能だ。

投稿日時 : 2007年4月8日 20:37

フィードバック

# re: ファイバ考察 - その2

やねさんは昔、ファイバ機構を自作してましたね。
http://www.sun-inet.or.jp/~yaneurao/yaneSDK3rd/chap0124.html

こういうのを作れば、旧 OS とかでも動作しそうですね。
2007/04/08 23:08 | melt

# re: ファイバ考察 - その2

http://www.kmonos.net/wlog/41.php#_1240040809
を読んで、(継続までは理解できてないというか、本来はそっちが本題なのだけれど)ループ機構の変換にファイバを使う記事を書いて、CodeZineの投稿予備審査をパスして放置してるものがありますw
要するに、EnumWindowsを、関数を1回呼ぶごとに1ウィンドウ列挙にしようという話。
2007/04/09 9:42 | シャノン

# re: ファイバ考察 - その2

>やねさんは昔、ファイバ機構を自作してましたね。

自作?さすがすごいですね。

>を読んで、(継続までは理解できてないというか、本来はそっちが本題なのだけれど)ループ機構の変換にファイバを使う記事を書いて、CodeZineの投稿予備審査をパスして放置してるものがありますw

ほ~、よく分りませんが、楽しみにしてます。
2007/04/09 22:10 | 囚人

# re: ファイバ考察 - その2

> ほ~、よく分りませんが、楽しみにしてます。

いや、掲載予定はありませんてw
2007/04/12 17:58 | シャノン

コメントの投稿

タイトル  
名前  
URL
コメント