今天我想知道c ++析构函数,所以我写了一个小测试程序.这回答了我原来的问题,但提出了一个新问题:
以下程序:
#include "stdafx.h"
#include <vector>
#include <iostream>
using namespace std;
class test
{
public:
int id;
vector<test> collection;
test(){}
test(int id_in){id = id_in;}
~test(){cout << "dying: " << id << "\n";}
};
int _tmain(int argc, _TCHAR* argv[])
{
{
test obj(1);
obj.collection.push_back(test(2));
obj.collection.push_back(test(3));
cout << "before overwrite\n";
obj = test(4);
cout << "before scope exit\n";
}
int x;
cin >> x;
}
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
dying: 2
dying: 2
dying: 3
before overwrite
dying: 2
dying: 3
dying: 4
before …
Run Code Online (Sandbox Code Playgroud) 有一天,我试图更好地理解线程概念,所以我写了几个测试程序.其中一个是:
using System;
using System.Threading.Tasks;
class Program
{
static volatile int a = 0;
static void Main(string[] args)
{
Task[] tasks = new Task[4];
for (int h = 0; h < 20; h++)
{
a = 0;
for (int i = 0; i < tasks.Length; i++)
{
tasks[i] = new Task(() => DoStuff());
tasks[i].Start();
}
Task.WaitAll(tasks);
Console.WriteLine(a);
}
Console.ReadKey();
}
static void DoStuff()
{
for (int i = 0; i < 500000; i++)
{
a++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望我能看到小于2000000的输出.我想象中的模型如下:更多线程同时读取变量a,a的所有本地副本都是相同的,线程递增它并且写入发生并且这种方式"丢失"一个或多个增量.
虽然输出是违反这个推理的.一个示例输出(来自corei5机器): …
昨天我遇到了一个非常奇怪的错误,一天后我几乎没有取得任何进展,所以我想这是询问社区的好人选。我会要求一些 patiecne 因为我认为这是一个虽然。
我有一个 C# Winforms 应用程序,它在生产环境中单击几下后挂起。只有在生产环境中才会发生同样的情况。当挂起发生时,什么也没有发生(没有错误消息,但是根据任务管理器,任务进入“无响应”状态)但 GUI 变得无响应。我在相同的环境中尝试过,我可以确认行为。
不幸的是,无法在 prod env 中安装开发工具和调试应用程序。我能做的最好的事情就是在应用程序停止时进行内存转储。问题是我完全不明白我在故障转储中看到的内容:我的主线程(GUI 线程)似乎卡在了一条我找不到任何原因的指令中。
这是我的主线程的堆栈跟踪:
KERNELBASE.dll!_RaiseException@16() + 0x54 bytes
[External Code]
CFAPControlLibrary.dll!CFAPControlLibrary.Communication.Base.GetSetting(string settingName) Line 850 + 0x10 bytes C#
CFAPControlLibrary.dll!CFAPControlLibrary.ConfigHelper.Get<CFAPControlLibrary.DataTypes.ActionSortingOption>(string settingName) Line 25 + 0x35 bytes C#
CFAPControlLibrary.dll!CFAPControlLibrary.ConfigHelper.Get<CFAPControlLibrary.DataTypes.ActionSortingOption>(string settingName, CFAPControlLibrary.DataTypes.ActionSortingOption defaultVal) Line 15 + 0x9 bytes C# CFAPControlLibrary.dll!CFAPControlLibrary.DataTypes.ActionStorage.Sort(System.Collections.Generic.List<CFAPControlLibrary.DataTypes.ActionClass> subject) Line 167 + 0xe bytes C#
CFAPControlLibrary.dll!CFAPControlLibrary.DataTypes.ActionStorage.GetByStatus(string pStatus) Line 162 + 0x46 bytes C#
CFAPControlLibrary.dll!CFAPControlLibrary.ActionSelector.FillNodes() Line 48 + 0x26 bytes C#
CFAPControlLibrary.dll!CFAPControlLibrary.CFAPMain.OnActionDetailsArrived(CFAPControlLibrary.CFAPMain.RawActionDetails bwr) Line 371 + 0x10 bytes C#
CFAPControlLibrary.dll!CFAPControlLibrary.CFAPMain.OnGetDetailsCompleted(object sender, …
Run Code Online (Sandbox Code Playgroud)