论坛: 编程破解 标题: CFileexception:generic,FileUnknown,OSerrorinformation=10054. 复制本贴地址    
作者: LinuxBoy [yearl]    论坛用户   登录
VC++单步调试时出现:
CFile exception: generic, File Unknown, OS error information = 10054.
程序就退出了。
什么意思?

地主 发表时间: 05/02 23:19

回复: 286 [unique]   版主   登录
操作系统错误码10054的内容是:远程主机强迫关闭了一个现有的连接。
可能是你打开的文件名格式有误吧.
注意在C/C++语言中表示路径的"\"要用"\\"表示.


B1层 发表时间: 05/04 09:22

回复: LinuxBoy [yearl]   论坛用户   登录
这是一个多线程的程序。
少几个线程时,程序没有问题,运行良好。可是线程一多就出现了上述情况。请问这是为什么?

B2层 发表时间: 05/04 21:16

回复: 286 [unique]   版主   登录
可能是你每个线程都打开同一个文件,但系统设定同时打开文件个数小于你的线程数.而你在打开的时候没有进行判断是否成功打开.
建议你加上是否成功打开的判断,如打开不成功,稍后再打.如果还不行,把打开文件那部分设为临界区或互斥,再试试.


B3层 发表时间: 05/05 09:13

回复: LinuxBoy [yearl]   论坛用户   登录
我是在主进程中打开文件的。
我打算让各个线程不断地一个接一个地向后读同一个文件,因此就是这样:
g_cs.Lock ();
fin.getline(szIn,300,'\n');
g_cs.Unlock ();


B4层 发表时间: 05/06 22:21

回复: ricky [ricky]   版主   登录
你这样写是不行的,要先判断该文件是否已被别的线程锁定

B5层 发表时间: 05/07 08:58

回复: 286 [unique]   版主   登录
g_cs.Lock ();
fin.open("test.txt");
fin.getline(szIn,300,'\n');
fin.close();
g_cs.Unlock ();

B6层 发表时间: 05/07 09:21

回复: LinuxBoy [yearl]   论坛用户   登录
我不要再次打开文件。
我要每个线程顺序向后读文件,同一个文件。每次一行。

B7层 发表时间: 05/07 22:24

回复: 286 [unique]   版主   登录
如果只为读一行,你可以把这行内容作为线程的参数传给线程,让其处理。

按你的实现,你的fin从何而来?
你的文件指针不打开,就读,怎么可能?
要知道一个线程其实就象一个单独的程序,即使是主线程打开的,其它线程也没法读。就象记事本打开的文件,WORD凭什么对其处理呢?

B8层 发表时间: 05/08 09:11

回复: LinuxBoy [yearl]   论坛用户   登录
我用的是全局文件指针。线程少时确实可以运行无误。
我要实现的是各个线程顺序不断地向后读同一个文件(其实是密码字典)的各行。


[此贴被 LinuxBoy(yearl) 在 05月08日23时13分 编辑过]

B9层 发表时间: 05/08 23:17

回复: 286 [unique]   版主   登录
如果那样,那可能就象和尚说的.某个线程读的时候,另一线程把文件给锁定了.


B10层 发表时间: 05/09 09:09

回复: LinuxBoy [yearl]   论坛用户   登录
线程把文件给锁定.那他总要释放啊。

B11层 发表时间: 05/09 22:43

回复: 286 [unique]   版主   登录
当一个线程锁定时,另一个线程读就读不成.于是就报错了.虽然此后前一线程又释放了锁定.
对于micro$oft的东东,何必非要问个所以然,上面不是给你提了两个建议吗?
取一个就行了.


B12层 发表时间: 05/10 10:49

回复: LinuxBoy [yearl]   论坛用户   登录
和尚可不可以给一段示范代码?

B13层 发表时间: 05/17 00:02

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号