我能够通过派生IDictionary和定义一个私有的SyncRoot对象在C#中实现一个线程安全的字典: public class SafeDictionary<TKey, TValue>: IDictionary<TKey, TValue> { private readonly object syncRoot = new object(); private Dictionary<TKey, TValue> d = new Dictionary<TKey, TValue>(); public object SyncRoot { get { return syncRoot; } } public void Add(TKey key, TValue value) { lock (syncRoot) { d.Add(key, value); } } // more IDictionary members… } 然后,我在我的消费者(multithreading)上locking这个SyncRoot对象: 例: lock […]
什么是实现C ++等价于instanceof的首选方法?
我有一个ObservableCollection<A> a_collection; 该集合包含“n”个项目。 每个项目A看起来像这样: public class A : INotifyPropertyChanged { public ObservableCollection<B> b_subcollection; Thread m_worker; } 基本上,这是所有连线到一个WPF的listview +详细信息视图控制显示在一个单独的列表视图中select的项目(双向绑定,更新属性更新等)b_subcollection。 当我开始执行线程时,问题就出现了。 整个想法是让整个a_collection使用它的工作线程来“做功”,然后更新它们各自的b_subcollections并让gui实时显示结果。 当我尝试它时,我得到一个exception,说只有Dispatcher线程可以修改一个ObservableCollection,工作停下来。 任何人都可以解释这个问题,以及如何解决这个问题? 干杯
在声明上初始化类成员variables是否更好? private List<Thing> _things = new List<Thing>(); private int _arb = 99; 或者在默认的构造函数? private List<Thing> _things; private int _arb; public TheClass() { _things = new List<Thing>(); _arb = 99; } 这只是一个风格问题,还是存在性能平衡,无论哪种方式?
我一直在做一个相当简单的程序转换string(假设数字input)到一个整数。 完成之后,我注意到一些非常奇怪的“bug”,我不能回答,主要是因为我对scanf() , gets()和fgets()函数的工作知之甚less。 (尽pipe我读过很多文献。) 所以不用写太多的文字,这里是程序的代码: #include <stdio.h> #define MAX 100 int CharToInt(const char *); int main() { char str[MAX]; printf(" Enter some numbers (no spaces): "); gets(str); // fgets(str, sizeof(str), stdin); // scanf("%s", str); printf(" Entered number is: %d\n", CharToInt(str)); return 0; } int CharToInt(const char *s) { int i, result, temp; result = […]
我有一个对象的列表,我需要保存在我的电脑的某个地方。 我已经阅读了一些论坛,我知道对象必须是可Serializable 。 但是如果我能得到一个例子,这将是很好的。 例如,如果我有以下内容: [Serializable] public class SomeClass { public string someProperty { get; set; } } SomeClass object1 = new SomeClass { someProperty = "someString" }; 但是,我怎么能存储object1在我的电脑的某个地方,以后检索?
那么为什么它总是推荐尽可能经常使用const? 在我看来,使用const比在C ++中的帮助更加痛苦。 但是再次,我从python的angular度来看这个问题:如果你不想改变某些东西,不要改变它。 所以说,这里有几个问题: 这似乎是每次我标记为const的东西,我得到一个错误,不得不改变一些其他函数的地方是常量。 然后这导致我不得不在其他地方改变另一个function。 这是什么东西,随着经验变得更容易? 使用const的好处真的足以弥补麻烦吗? 如果你不打算改变一个对象,为什么不写一些不改变它的代码呢? 我应该注意到,在这个时候,我最关注的是使用const来实现正确性和可维护性的好处,但是对性能的影响也是很好的。
你如何迭代通过标准C ++recursion的每个文件/目录?
我使用Eclipse-CDT在Ubuntu x64上设置了一个C ++项目。 我基本上正在做一个你好的世界,并链接到商业第三方图书馆。 我已经包含链接到他们的库的头文件,但我仍然得到链接器错误。 除了显而易见的情况之外,是否还有其他一些可能的问题(例如,我确信我链接到了正确的库)。 有没有办法确认我连接的静态库是64位? 有没有办法确认图书馆有我期待的类(和方法)? Eclipse说: build立目标:LinkProblem 调用:GCC C ++链接器 g ++ -L / home / notroot / workspace / somelib-3 / somelib / target / bin -o“LinkProblem”./src/LinkProblem.o -lsomelib1 -lpthread -lsomelib2 -lsomelib3 ./src/LinkProblem.o:在函数`main'中: /home/notroot/workspace/LinkProblem/Debug/../src/LinkProblem.cpp:17:对“SomeClass :: close()”的未定义引用 ./src/LinkProblem.o:在函数SomeOtherClass中: /home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:148:对SomeClass :: SomeClass()的未定义引用 /home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:148:未定义对“SomeOtherClass的vtable”的引用 /home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:151:对SomeClass ::〜SomeClass()的未定义引用 ./src/LinkProblem.o:在函数`〜SomeOtherClass'中: /home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:140:未定义对“SomeOtherClass的vtable”的引用 /home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:140:对SomeClass ::〜SomeClass()的未定义引用 /home/notroot/workspace/somelib-3/somelib/include/sql/somefile.h:140:对SomeClass ::〜SomeClass()的未定义引用 collect2:ld返回1退出状态 make:*** [LinkProblem]错误1
我目前首选的C ++环境是免费的,基本上非常出色的Microsoft Visual Studio 2005 Express版本。 我不时有发送.exe文件给其他人的结果令人满意。 然而最近我发现了一个令人不安的发现,那就是我喜欢的运气多得令人满意。 试图在一个旧的(2001年份,没有仔细更新的)XP盒子上运行这些程序中的一个,只给了我一个讨厌的“系统无法运行x.exe”(或类似的)消息。 一些谷歌search显示,使用这个工具集,甚至指定静态链接结果在一个简单的hello-world.exe实际上依靠额外的.dll文件(msvcm80.dll等)。 一个令人难以置信的精心版本计划系统(清单文件任何人?),然后将不会让.exe运行没有完全正确的.dll版本。 我不想或不需要这些东西,我只想要一个老式的自包含的.exe,除了最低的共同点Win32操作之外什么也不做,可以运行在任何老式的win32操作系统上。 有谁知道是否有可能做我想用我现有的工具集? 谢谢。