#include "stdafx.h"
#include "glib.h"
#include<windows.h>
#include <iostream>
using namespace std;
unsigned long g_ulIdx = 0;
gpointer ReadFunc(gpointer data)
{
int i = 0;
GAsyncQueue *pGAsyncQueue = (GAsyncQueue *)data;
while(1)
{
//cout << "Read: " << ++i << endl;
int *pInt = new int();
*pInt = ++i;
g_async_queue_push(pGAsyncQueue, pInt);
Sleep(1);
}
return NULL;
}
gpointer WriteFunc(gpointer data)
{
int i = 0;
GAsyncQueue *pGAsyncQueue = (GAsyncQueue *)data;
while(1)
{
gpointer pInt = g_async_queue_pop(pGAsyncQueue);
g_ulIdx++;
delete pInt;
//Sleep(0);
}
return NULL;
}
gpointer MonitFunc(gpointer data)
{
int i = 0;
while(1)
{
cout << "idx: " << g_ulIdx << endl;
Sleep(1000);
}
return NULL;
}
int _tmain(int argc, _TCHAR* argv[])
{
g_thread_init(NULL); //多线程保护程序
GAsyncQueue *pGAsyncQueue = g_async_queue_new();
GThread *ReadFun = g_thread_new("ReadFun", ReadFunc, pGAsyncQueue);
GThread *WriteFun = g_thread_new("WriteFun", WriteFunc, pGAsyncQueue);
GThread *MonitFun = g_thread_new("MonitFun", MonitFunc, pGAsyncQueue);
g_thread_join(ReadFun);
g_thread_join(WriteFun);
return 0;
}