マルチコアを使った並列処理

multicore.png
#include <Windows.h>
#include <cstdio>
#include <cstdlib>
#include <process.h>
HANDLE sem;
void fileget_func(void* param)
{
    WaitForSingleObject(sem,INFINITE);
    int i=0;
    while(i<3){
        printf("fileget_func start[%d] \n",i);
        // 1秒待つ
        Sleep(1000);
        printf("fileget_func end \n");
        i++;
    }
}
//セマフォオブジェクトは、カウントが 0 より大きい場合はシグナル状態に
//カウントが 0 の場合は非シグナル状態になります。
void render_func(void* param)
{
    int i=0;
    while(i<3){
        printf("render_func start %d\n",i);
        // 1秒待つ
        Sleep(1000);
        printf("render_func end \n");
        //セマファ解放 セマフォカウンタを1増やす
        ReleaseSemaphore(sem,1,NULL);
        i++;
    }
}
/*スレッド関数の引数データ構造体*/
typedef struct _thread_arg {
    int thread_no;
    int *data;
} thread_arg_t;
 
int main()
{
    thread_arg_t ftarg, rtarg;
    //CreateSemaphore(セキュリティ記述子,初期のカウント,最大カウント,オブジェクトの名前)
    sem = CreateSemaphore(NULL,0,1,NULL);
    /*スレッドの生成*/
    ftarg.thread_no = 0;
    HANDLE fileget = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)fileget_func,(void *)&ftarg,0,NULL);
    SetThreadIdealProcessor(fileget,0);
    rtarg.thread_no = 0;
    /*スレッドの生成*/
    HANDLE render = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)render_func,(void *)&rtarg,0,NULL);
    SetThreadIdealProcessor(render,1);
    WaitForSingleObject(render,INFINITE);
    return 0;
}

サポートサイト Wikidot.com