首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建线程时的BSoD

创建线程时的BSoD
EN

Stack Overflow用户
提问于 2010-04-18 00:22:42
回答 2查看 230关注 0票数 0

我正在尝试同步创建+5个线程,所以应该不会有任何并发错误。

代码:

代码语言:javascript
运行
复制
System.Threading.Thread t = new System.Threading.Thread(proc);
t.Start();//==t.BlueScreen();
t.Join();

黑暗是一种特征吗?

我做错了什么吗?

操作系统:微软windows vista(不幸的是) x64

Language:C# 3.0|4.0

.Net版本:3.5|4

编辑:

代码语言:javascript
运行
复制
Personel[] spersonel;

进程:

代码语言:javascript
运行
复制
void proc()
{
    spersonel = Personel.GetRows(GetThreadSafeDataConnection());
}

Personel:

代码语言:javascript
运行
复制
   internal static Personel[] GetRows(System.Data.SqlClient.SqlConnection Connection)
        {
            int i = 0;
            int c = SomeOtherGODClass.Val_int(SomeGODClass.ExecuteScalar("Select Count(*) from Personel", Connection).ToString());
            Personel[] Rs = new Personel[c];
            System.Data.SqlClient.SqlDataReader sdr = SomeGODClass.ExecuteReader("Select * from Personel", Connection);
            while (sdr.Read()) Rs[i++] = new Personel(sdr);
            sdr.Close();
            if (Rs.Length > 1) mergeSort(ref Rs);
            return Rs;
        }
EN

回答 2

Stack Overflow用户

发布于 2010-04-18 00:26:43

您粘贴的代码片段看起来很好,但实际上并没有告诉我们太多信息。这将有助于粘贴proc的内容,并为我们提供更大范围的程序正在做什么。

粘贴尽可能多的BSoD内容可能也很有帮助,包括它发生的原因(访问冲突等)。虽然不是直接有帮助,但它将提供一些线索。

票数 2
EN

Stack Overflow用户

发布于 2010-04-18 01:21:55

您的错误代码不是典型的BSOD代码。它是STATUS_PAGEFILE_QUOTA,“进程的页面文件配额已耗尽。”

在64位版本的Windows上实现这一点是可能的。64位程序不会耗尽内存,它们有16TB的虚拟内存。它们首先会用完可映射的内存页。操作系统设置了程序可以容纳的分页文件大小的上限。你已经超过它了。如果它真的是一个BSOD,那么它可能耗尽了内核内存池空间,您创建的每个线程需要大约24KB的内存用于内核堆栈。

我不得不猜测你的程序创建了太多的线程。请注意Taskmgr.exe进程选项卡中的线程列。Performance选项卡显示内核内存池的情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2659080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档