小编Har*_*ari的帖子

当覆盖堆栈上的对象时,不会调用析构函数

今天我想知道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)

c++ destructor

6
推荐指数
2
解决办法
827
查看次数

并发问题:并行写入

有一天,我试图更好地理解线程概念,所以我写了几个测试程序.其中一个是:

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机器): …

c# concurrency task-parallel-library

5
推荐指数
1
解决办法
1024
查看次数

C# Winforms 应用程序挂起而不是抛出异常

昨天我遇到了一个非常奇怪的错误,一天后我几乎没有取得任何进展,所以我想这是询问社区的好人选。我会要求一些 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)

c# exception crash-dumps winforms

3
推荐指数
1
解决办法
2349
查看次数