说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

关于文件读写问题--频繁的!!!100分!

编辑:说三道四文库 发布时间:2018-05-24 08:21
HTML文档下载 WORD文档下载 PDF文档下载

  CreateThread(,Fun1,,);
  Fun1()
  { 
    while(1)
    {
      得到某个值,(此处通过SOCKET得到)
      启动某个类的成员函数
      class.fun();
     }
  }

  class.fun()
  {
    打开文件,进行读写操作;
  }

  可是执行后,进行大批量数据传递的时候,老是出现错误,我用的是fopen()函数来进行文件读写操作。比如,我在0秒的时间内发送1000条数据过来,那么就出现错误,是不是没对文件进行加琐造成的?可是,只有class.fun()执行完之后循环才走下一次呀,而此时对文件操作已经结束了呀。
   哪位能帮忙解决下。
应该多个线程同时读写弄出的问题吧
!~

你用信号量同步一下试试!

这样也讲得太不清了吧
出现什么错误?
设置变量,确保保存了再进行
HANDLE hMutex = CreateMutex(null, false, "lock");
Fun1()
  { 
    while(1)
    {
      得到某个值,(此处通过SOCKET得到)
      启动某个类的成员函数
      WaitforSingleObject(hMutex, INFINTE);
      class.fun();
      ReleaseMutex(hMutex);
     }
  }


在我的class.fun()中
       fp = fopen(strUDPath+strUsrNum+".txt", "w+");//建立用户
       fclose(fp);
提示fclose.c,58行stream!=NULL
谢谢 lingling0000(不为风动的枫铃)以及各位,请发表您的看法。
 lingling0000(不为风动的枫铃,你的意见我正在测试,各位还有什么看法,另外,

在我的class.fun()中
       fp = fopen(strUDPath+strUsrNum+".txt", "w+");//建立用户
       fclose(fp);
提示fclose.c,58行stream!=NULL

如何改正呢?
信息太少了,stream是什么?
多贴出点代码
because fp == NULL, maybe?
同意lingling0000(不为风动的枫铃) 
——————————————————
在我的class.fun()中
       fp = fopen(strUDPath+strUsrNum+".txt", "w+");//建立用户
       fclose(fp);
提示fclose.c,58行stream!=NULL

如何改正呢?
你先跟踪看一下有没有正确打开文件
有个问题不知道你注没注意到:就是在多线程中尽量不要用CRT函数(fopen,strcpy...),因为他们使用的是全局参数,会互相影响。

另外,也可选setting->c++ -> category(Code Generation) -> use run-time library -> MulitThread Dll

  谢谢各位!!!
 
  lingling0000(不为风动的枫铃)说的采用CMutex我试了一下.OK了。
不过,还是有点小问题.还是class.fun()中的问题,在这里面有个函数,记录日志,也是打开一个a.log文件,把操作记录到日志里.我发现,它里面记录并不是按照处理顺序来记录的.

  比如,第一次调用class.fun()时候,应该在a.log中记录一个信息1,然后第二次调用class.fun()中,记录信息2.然后,在a.log里面,却不是这样的.它的顺序有点乱.
  一点说明:我是客户端同时发1000个流过来.比如说,同时发1000个相同信息a给Fun1(),while循环了1000次.

   另外,代码不少了,框架就这样.程序全帖出来,很大,很乱:)的.

   再次谢谢各位.
线程操作造成的。上面的回答不错。可以参考。还不明白,看看线程间的同步。
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘