YUKI_BEAR 2014-05-23 15:11 采纳率: 0%
浏览 2522

fatal error C1004: unexpected end of file found

//读者与写者问题

#include

#include

#include

#ifdef _MT

//设置控制台输出颜色

BOOL SetConsoleColor(WORD wAttributes)

{

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

if (hConsole == INVALID_HANDLE_VALUE)

return FALSE;

return SetConsoleTextAttribute(hConsole, wAttributes);  

}

const int READER_NUM = 5; //读者个数

//关键段和事件

CRITICAL_SECTION g_cs, g_cs_writer_count;

HANDLE g_hEventWriter, g_hEventNoReader;

int g_nReaderCount;

//读者线程输出函数(变参函数的实现)

void ReaderPrintf(char *pszFormat, ...)

{

va_list pArgList;

va_start(pArgList, pszFormat);  
EnterCriticalSection(&g_cs);  
vfprintf(stdout, pszFormat, pArgList);  
LeaveCriticalSection(&g_cs);  
va_end(pArgList);  

}

//读者线程函数

unsigned int __stdcall ReaderThreadFun(PVOID pM)

{

ReaderPrintf(" 编号为%d的读者进入等待中...\n", GetCurrentThreadId());

//等待写者完成

WaitForSingleObject(g_hEventWriter, INFINITE);

//读者个数增加  
EnterCriticalSection(&g_cs_writer_count);  
g_nReaderCount++;  
if (g_nReaderCount == 1)  
    ResetEvent(g_hEventNoReader);  
LeaveCriticalSection(&g_cs_writer_count);  

//读取文件  
ReaderPrintf("编号为%d的读者开始读取文件...\n", GetCurrentThreadId());  

Sleep(rand() % 100);  

//结束阅读,读者个数减小,空位增加  
ReaderPrintf(" 编号为%d的读者结束读取文件\n", GetCurrentThreadId());  

//读者个数减少  
EnterCriticalSection(&g_cs_writer_count);  
g_nReaderCount--;  
if (g_nReaderCount == 0)  
    SetEvent(g_hEventNoReader);  
LeaveCriticalSection(&g_cs_writer_count);  
return 0;  

}

//写者线程输出函数

void WriterPrintf(char *pszStr)

{

EnterCriticalSection(&g_cs);

SetConsoleColor(FOREGROUND_GREEN);

printf(" %s\n", pszStr);

SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);

LeaveCriticalSection(&g_cs);

}

//写者线程函数

unsigned int __stdcall WriterThreadFun(PVOID pM)

{

WriterPrintf("写者线程进入等待中...");

//等待读文件的读者为零

WaitForSingleObject(g_hEventNoReader, INFINITE);

//标记写者正在写文件

ResetEvent(g_hEventWriter);

//写文件  
WriterPrintf("  写者开始写文件.....");  
Sleep(rand() % 100);  
WriterPrintf("  写者结束写文件");  

//标记写者结束写文件  
SetEvent(g_hEventWriter);  
return 0;  

}

int main()

{
printf(" 读者写者问题\n");

//初始化事件和信号量

InitializeCriticalSection(&g_cs);

InitializeCriticalSection(&g_cs_writer_count);

//手动置位,初始已触发

g_hEventWriter = CreateEvent(NULL, TRUE, TRUE, NULL);

g_hEventNoReader = CreateEvent(NULL, FALSE, TRUE, NULL);

g_nReaderCount = 0;

int i;

HANDLE hThread[READER_NUM + 1];

//先启动二个读者线程

for (i = 1; i <= 2; i++)

hThread[i] = (HANDLE)_beginthreadex(NULL, 0, ReaderThreadFun, NULL, 0, NULL);

//启动写者线程

hThread[0] = (HANDLE)_beginthreadex(NULL, 0, WriterThreadFun, NULL, 0, NULL);

Sleep(50);

//最后启动其它读者结程

for ( ; i <= READER_NUM; i++)

hThread[i] = (HANDLE)_beginthreadex(NULL, 0, ReaderThreadFun, NULL, 0, NULL);

WaitForMultipleObjects(READER_NUM + 1, hThread, TRUE, INFINITE);

for (i = 0; i < READER_NUM + 1; i++)

CloseHandle(hThread[i]);

//销毁事件和信号量

CloseHandle(g_hEventWriter);

CloseHandle(g_hEventNoReader);

DeleteCriticalSection(&g_cs);

DeleteCriticalSection(&g_cs_writer_count);

return 0;

}

  • 写回答

1条回答 默认 最新

  • oyljerry 2015-01-24 06:26
    关注

    文件括号等配对了没,分号都有了

    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧