我编写了一个程序来计算文本中的行,单词和字符:它用线程来完成.它有时很好用,但其他时候却不那么好.最终发生的是指向单词数量的变量,计算的字符有时会变短,有时则不会.
在我看来,线程有时会在他们可以计算他们想要的所有单词或字符之前结束.是因为当while(true)循环中断时这些线程超出了范围吗?
我已经在下面的问题中包含了代码:
private void countText() {
try {
reader = new BufferedReader(new FileReader("this.txt"));
while (true) {
final String line = reader.readLine();
if(line == null) {break;}
lines++;
new Thread(new Runnable() {public void run() {chars += characterCounter(line);}}).start();
new Thread(new Runnable() {public void run() {words += wordCounter(line);}}).start();
println(line);
}
} catch(IOException ex) {return;}
}
Run Code Online (Sandbox Code Playgroud)
(子问题:这是我第一次询问某些内容并发布代码.我不想使用StackOverflow代替谷歌和维基百科,我担心这不是一个合适的问题?我试图让问题更一般,所以我不只是要求我的代码帮助......但是,是否有另一个网站,这种问题可能更合适?)
我正在尝试研究如何在Mac OS X上的C++应用程序中存储然后打印当前堆栈.主要问题似乎是在主要可执行文件中给出一个地址时让dladdr返回正确的符号.我怀疑这个问题实际上是一个编译选项,但我不确定.
我已经尝试过来自Darwin/Leopard的回溯代码,但它调用了dladdr并且与我自己的代码调用dladdr有相同的问题.
原帖:目前我用这段代码捕获堆栈:
int BackTrace(Addr *buffer, int max_frames)
{
void **frame = (void **)__builtin_frame_address(0);
void **bp = ( void **)(*frame);
void *ip = frame[1];
int i;
for ( i = 0; bp && ip && i < max_frames; i++ )
{
*(buffer++) = ip;
ip = bp[1];
bp = (void**)(bp[0]);
}
return i;
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常.然后打印堆栈我正在使用这样的dladdr:
Dl_info dli;
if (dladdr(Ip, &dli))
{
ptrdiff_t offset;
int c = 0;
if (dli.dli_fname && dli.dli_fbase)
{
offset = (ptrdiff_t)Ip - (ptrdiff_t)dli.dli_fbase;
c …Run Code Online (Sandbox Code Playgroud) 为什么在执行下面的代码时会引发EAccessViolation?
uses
Generics.Collections;
...
var
list: TList<TNotifyEvent>;
...
begin
list := TList<TNotifyEvent>.Create();
try
list.Add(myNotifyEvent);
list.Remove(myNotifyEvent); // EAccessViolation at address...
finally
FreeAndNil(list);
end;
end;
procedure myNotifyEvent(Sender: TObject);
begin
OutputDebugString('event'); // nebo cokoliv jineho
end;
Run Code Online (Sandbox Code Playgroud) 在我们的构建过程中,我们aspnet_compiler.exe针对我们的网站运行,以确保ASP.NET/MVC中所有后期绑定的内容实际构建(我对ASP.NET一无所知,但我确信这对于防止在运行时发现故障是必要的).
我们的网站规模相当大,有几百页/观看/控制/等.然而,在10-15分钟范围内所花费的时间似乎过多(作为参考,这比整个解决方案需要大约40个项目的编译时间更长,我们只是预编译了两个网站项目).
我怀疑硬件是问题,因为我运行的是最新的四核英特尔芯片,配备4GB内存和WD Velociraptor 10,000rpm硬盘.而奇怪的部分是EXE似乎没有使用太多的CPU(1-5%)并且似乎也没有做太多的I/O.
那么......这是一个众所周知的问题吗?为什么这么慢?有没有办法加快速度?
注意:为了澄清人们已经回答的一些事情,我不是在谈论Visual Studio中的代码编译.我们已经在使用Web应用程序项目了,编译速度不是问题.问题是在已经编译这些项目之后预先编译网站(有关详细信息,请参阅此MSDN页面)作为开发构建脚本的一部分.我们正在执行就地预编译,而不是将文件复制到目标目录.
我们希望为人们提供能够为他们的帐户添加一些逻辑(比如,给出一些参数,如何计算特定结果).所以,基本上,这就等于编写简单的业务规则,并支持条件和表达式.然而,挑战在于为他们提供一个简单的在线编辑器,他们可以通过完全可视的方式创建逻辑(最好)(拖放Expr树节点可能 - 有点像Y!管道).
有没有人知道脚本/宏/特定于域的语言让人们这样做?挑战是可视化编辑器,因为我们不希望投资开发用于编辑的UI.基本要求是:
1.嵌入到另一种语言,或安全运行(否reboot -n或<JUNK-DANGEROUS-COMMAND> >> ~/.bashrc)
2.无需编码背景的用户可轻松访问(无需任何高级功能)
3.最好有一个简单的基于GUI的编辑器来创建逻辑非开发人员可以访问的程序(有点像电子表格)
4.生成编译时警告(无效代码)的一些能力是好的(类型安全吗?)
5.能够在执行之前嵌入一些可用于解释器的数据(例如,name,birthday,amount)
有人试过做这样的事情并得到任何想法吗?我看了Lua,Io,Python,Ruby和其他许多人,但挑战本质上是我不认为非程序员能够理解这些代码.如果可以轻松开发编辑器,那么可以通过"元编程"添加的东西也可以说Ruby也很好!
我在Windows上的turbo C上工作,其中char占用一个字节.现在我的问题在于下面的联合.
union a
{
unsigned char c:2;
}b;
void main()
{
printf("%d",sizeof(b)); \\or even sizeof(union a)
}
Run Code Online (Sandbox Code Playgroud)
该程序打印输出为2,其中union应该只占用1个字节.为什么会这样?
对于struct,它可以很好地给出1个字节但这个联合工作不正常.
还有一件事如何访问这些位字段.
scanf("%d",&b.c); //even scanf("%x",b.c);
Run Code Online (Sandbox Code Playgroud)
没有用,因为我们不能有位的地址.所以我们必须使用下面的另一个变量
int x;
scanf("%d",&x);
b.c=x;
Run Code Online (Sandbox Code Playgroud)
我们不能避免吗?有没有其他方法???
我找不到Boost 1.37.0的预构建的MSVC++库,只有源代码.我不明白他们奇怪的构建系统是如何工作的...有没有我可以找到下载Visual Studio项目的地方?
我知道我正在寻找的可能是一个安全漏洞,但由于我设法在 Oracle 和 SQL Server 中做到了这一点,所以我会尝试一下:
我正在寻找一种从 MySQL 上的 SQL 脚本执行 shell 命令的方法。如有必要,可以创建和使用新的存储过程。
注意:我不是在寻找 mysql 命令行工具提供的 SYSTEM 命令。相反,我正在寻找这样的东西:
开始 IF COND1... EXEC_OS cmd1; 否则 EXEC_OS cmd2; 结尾;
其中 EXEC_OS 是调用我的代码的方法。
我正在寻找一种用于统计分析的基本软件.最重要的是简单直观的使用,开箱即用"开箱即用".至少基本操作应该是交互式的.免费将是一个奖金:)
目的是分析数据转储和各种进程的日志.
对于过滤和重新组合数据,Excel失败(至少对我来说),我想像"Excel with SQL"这样的东西会很好.我以前一直在使用MS Access + Excel并复制数据,但这很痛苦.
你有什么建议吗?
澄清我不是在寻找IIS/Web服务器日志的特定工具,而是查找具有制表符分隔值的各种数据结束事件日志(主要来自自定义应用程序).
我总是听说使用"lastInsertId"(或者如果你不使用PDO,则使用mysql_insert_id())是邪恶的.在触发器的情况下,它显然是,因为它可以返回一些完全不是INSERT创建的最后一个ID.
$DB->exec("INSERT INTO example (column1) VALUES ('test')");
// Usually returns your newly created ID.
// However when a TRIGGER inserts into another table with auto-increment:
// -> Returns newly created ID of trigger's INSERT
$id = $DB->lastInsertId();
Run Code Online (Sandbox Code Playgroud)
有什么选择?