我需要非常快速地使用C++(我之前从未使用过它) - 通过Visual Studio(即托管C++)学习是否有用?或者我最终会在VS中学习C++的扩展和特性,而不是语言本身?
如果不建议在VS中学习,你们建议使用什么平台/ IDE?
编辑:在编写非托管C++时,有人可以详细说明VS将为我隐藏或管理的内容吗?我真的需要学习像指针,垃圾收集和低级语言的所有细节之类的东西.. VS是否抽象或隐藏任何这类东西给你?
感谢所有的建议..
我正在研究这个C++项目.
所有类的实现都与.h文件分开.
但是,我不确定为什么/何时需要前方声明.
例如,当我#included"ClassType.h"时,我刚刚遇到错误,编译器完全拒绝编译具有指向ClassType的指针的类,即使类ClassType 在"ClassType.h"中明确定义.
为什么编译器不能简单地看到我已经#included"ClassType.h",为什么它需要一个前向声明呢?
#include "ClassType.h"
// REFUSES TO COMPILE WITHOUT forward declaration
class ClassType;
class SomeClass
{
ClassType* instance;
};
Run Code Online (Sandbox Code Playgroud) 是否有内置的方法使用HTTP将文件下载到本地目录?
我可以打算忘记或编写自定义任务,但我想确保没有现成的方法来实现这一点.
提前致谢!
这个问题似乎微不足道,但我希望你不要忽视它.
在销毁TThread对象之前,通常需要等到调用TThread.Execute()方法的线程完成,因为只有这样我们才能确定,例如,不再访问在类的析构函数中销毁的对象.因此,有必要调用Terminate来设置线程必须检查的Terminated标志以知道是否退出,然后调用WaitFor()方法.
因为线程可能被挂起,我认为在调用WaitFor之前恢复它是好的,否则调用线程将会死锁.并且因为线程可以多次挂起,所以应该恢复相同的次数,对吗?
while Suspended do
Resume;
Run Code Online (Sandbox Code Playgroud)
如果线程被创建为暂停,我们不必担心当我们恢复线程只会终止它时将调用TThread.Execute()方法 - 它不会(如果我错了请纠正我).
我所说的建议为每个被释放的TThread对象使用以下代码行:
MyThread.Terminate;
while MyThread.Suspended do
MyThread.Resume;
MyThread.WaitFor;
MyThread.Free;
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我们销毁创建多个线程的应用程序时,为每个被破坏的TThread对象编写这样一段代码会使代码变得非常长,甚至可能不透明.
因此我得出结论,所有这些都可以放在TThread类的重写析构函数中,这要归功于调用MyThread.Free(如果设置了MyThread.FreeOnTerminate,则调用MyThread.Terminate),而不关心是否销毁object是否是TThread对象:
destructor TMyThread.Destroy;
begin
//if FreeOnTerminate, the calling thread cannot wait for itself
if GetCurrentThreadId <> ThreadId then
begin
Terminate;
while Suspended do
Resume;
WaitFor;
end;
{free all objects created in this class}
inherited Destroy;
end;
Run Code Online (Sandbox Code Playgroud)
请原谅我提出这样一个基本问题.但是,我希望通过这种方式了解您的意见 - 我希望这是一种普遍的方式 - 销毁TThread对象.我问这个问题,因为我从我的同事的代码中学到了他们通常使用第一个代码示例来销毁这些对象,但他们从来没有用来检查等待的线程是否没有被挂起,如果线程我认为有点危险可能会在代码中的某处暂停.因此,我试图找到一种破坏这个类的对象的通用方法,这将使代码更清晰,更安全.我希望我没有让情况变得更糟 - 你怎么看?
提前感谢您的建议.
我是Eclipse-CDT的新手,第一次建立了一个新项目.我试图在没有硬编码绝对路径的情况下引用Boost .
我在工作区文件夹中添加了boost,例如/ home/user/workspace/boost_1_39_0
我当时希望添加一个指向相对于工作区的文件夹的include目录,但Eclipse不会这样做,它似乎只想指向/ home/user/workspace/[MyProjectNameHere]中的思考
有小费吗?将Boost复制到我的项目文件夹似乎没有意义,因为它出现在Eclipse中,而Eclipse想要构建它(当然,我可以将其排除).
我希望能够在Oracle 9i中拆分csv字符串
我已经阅读了以下文章 http://www.oappssurd.com/2009/03/string-split-in-oracle.html
但我不明白如何使这项工作.以下是我的一些问题
我想创建一个tab/widget/thingymajiggy,就像这张图片中的反馈一样:
替代文字http://i31.tinypic.com/2m35ic1.png
表现得像这样.我只需要重定向点击,我不需要所有其他的东西.
我一直无法找到一个JQuery插件,这样做 - 但也许我只是不知道正确的术语.
...是的,我只能掠夺得到满足,但我宁愿拥有一个经过良好尝试和测试的JQuery插件.
为了使我的数据更易于访问,我想将表格数据存储在复杂的哈希中.当脚本循环遍历我的数据时,我正在尝试增加'HoHoHoA'.根据'perldsc'中的指南:
push @ { $hash{$column[$i]}{$date}{$hour} }, $data[$i];
Run Code Online (Sandbox Code Playgroud)
该脚本编译并运行没有问题,但不会向哈希添加任何数据:
print $hash{"Frequency Min"}{"09/07/08"}{"15"};
Run Code Online (Sandbox Code Playgroud)
即使密钥应该存在,也不返回任何内容.在哈希上运行'exists'表示它不存在.
我正在阅读的数据文件如下所示:
DATE TIME COLUMN1 COLUMN2 COLUMN3...
09/06/2008 06:12:56 56.23 54.23 56.35...
09/06/2008 06:42:56 56.73 55.28 54.52...
09/06/2008 07:12:56 57.31 56.79 56.41...
09/06/2008 07:42:56 58.24 57.30 58.86...
.
.
.
Run Code Online (Sandbox Code Playgroud)
我希望将任何给定日期和小时的数组中每列的值组合在一起,因此{COLUMN},{DATE}和{HOUR}的三个哈希值.
结果结构如下所示:
%monthData = (
"COLUMN1" => {
"09/06/2008" => {
"06" => [56.23,56.73...],
"07" => [57.31,58.24...]
}
},
"COLUMN2" => {
"09/06/2008" => {
"06" => [54.23,55.28...],
"07" => [56.79,57.30...]
}
},
"COLUMN3" => {
"09/06/2008" => { …Run Code Online (Sandbox Code Playgroud) 我目前正在研究一个多线程应用程序,偶尔也会收到一个同时修改的异常(平均大约每小时一次或两次,但是看似随机的间隔).
有缺陷的类本质上是一个map的包装器 - 它扩展了LinkedHashMap(accessOrder设置为true).该类有几个方法:
synchronized set(SomeKey key, SomeValue val)
Run Code Online (Sandbox Code Playgroud)
set方法将键/值对添加到内部映射,并受synchronized关键字的保护.
synchronized get(SomeKey key)
Run Code Online (Sandbox Code Playgroud)
get方法根据输入键返回值.
rebuild()
Run Code Online (Sandbox Code Playgroud)
内部地图偶尔重建一次(〜每2分钟,间隔与异常不匹配).rebuild方法基本上根据键重建值.由于rebuild()相当昂贵,我没有在方法上放置synchronized关键字.相反,我正在做:
public void rebuild(){
/* initialization stuff */
List<SomeKey> keysCopy = new ArrayList<SomeKey>();
synchronized (this) {
keysCopy.addAll(internalMap.keySet());
}
/*
do stuff with keysCopy, update a temporary map
*/
synchronized (this) {
internalMap.putAll(tempMap);
}
}
Run Code Online (Sandbox Code Playgroud)
例外情况发生在
keysCopy.addAll(internalMap.keySet());
Run Code Online (Sandbox Code Playgroud)
在synchronized块内.
建议非常感谢.请随意向我指出Effective Java和/或Concurrency in Practice中的特定页面/章节.
更新1:
消毒堆栈跟踪:
java.util.ConcurrentModificationException
at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:365)
at java.util.LinkedHashMap$KeyIterator.next(LinkedHashMap.java:376)
at java.util.AbstractCollection.toArray(AbstractCollection.java:126)
at java.util.ArrayList.addAll(ArrayList.java:473)
at a.b.c.etc.SomeWrapper.rebuild(SomeWraper.java:109)
at a.b.c.etc.SomeCaller.updateCache(SomeCaller.java:421)
...
Run Code Online (Sandbox Code Playgroud)
更新2:
感谢大家到目前为止的答案.我认为问题在于LinkedHashMap及其accessOrder属性,尽管我并不完全确定atm(调查). …
c++ ×3
boost ×1
collections ×1
concurrency ×1
css ×1
csv ×1
delphi ×1
destructor ×1
eclipse ×1
eclipse-cdt ×1
html ×1
java ×1
jquery ×1
managed-c++ ×1
msbuild ×1
oop ×1
oracle ×1
perl ×1
principles ×1
tokenize ×1
tthread ×1