在delphi中,TThread中的方法终止.似乎subthread不能通过调用terminate或free来杀死另一个线程.例如A(主要形式),B(线程单元),C(另一种形式).
B正在向主窗体和C发送数据(通过调用syncronize),我们尝试通过调用B.terminate在B执行时终止B.但是这种方法不起作用,B仍在工作,直到它以execute方法结束.
请帮忙.先感谢您.
是否有用于计算单词中音节数的javascript库?怎么算?
谢谢
编辑
感谢Sydenam和zozo提供有用的信息和可能的答案.
我在这个论坛上找到了Pesto的代码,但它是在Ruby中.其中一个简洁版本如下:
def new_count(word)
word.downcase!
return 1 if word.length <= 3
word.sub!(/(?:[^laeiouy]es|ed|[^laeiouy]e)$/, '')
word.sub!(/^y/, '')
word.scan(/[aeiouy]{1,2}/).size
end
Run Code Online (Sandbox Code Playgroud)
这似乎很短但很复杂.你能把这个功能翻译成javascript吗?再次感谢你.
下面是在delphi中使用指针的简单示例.
Type
TRecord1 = Record
field1 : String;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Rec : TRecord1;
Ptr: ^TRecord1;
begin
Rec.field1:= 'field1';
Ptr := @Rec;
memo1.Lines.Add (Ptr^.field1);
memo1.Lines.Add (Ptr.field1); // it also works.
end;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Ptr ^和Ptr都可以工作.似乎delphi是允许用户更灵活地指向值.但只是通过阅读这两行,它们在语法上是不同的,可能意味着不同.在这种情况下两者都有效.但我的问题是:
非常感谢提前.
这个问题是讨论如何编写一个拼写纠正器,而不是Delphi拼写检查器组件的副本 .
两年前,我在他的Python 网站上找到并使用了Peter Norvig的拼写纠正器代码.但表现似乎并不高.非常有趣的是,最近在他的网页列表中附加了更多实现相同任务的语言.
Peter的页面中的一些行包括如下语法:
[a + c + b for a, b in splits for c in alphabet]
Run Code Online (Sandbox Code Playgroud)
如何将其翻译成delphi?
我对SO的Delphi专家将如何使用相同的理论并使用一些合适的线和可能的平庸或更好的性能执行相同的任务感兴趣.这不是为了贬低任何语言,而是要学会比较他们如何以不同方式实现任务.
非常感谢提前.
[编辑]
我将引用贡献C版本的Marcelo Toledo说:"虽然本文[C版本]的目的是展示算法,而不是突出Python ...".虽然他的C版本排在第二位,但根据他的文章,他的版本在字典文件庞大时性能很高.因此,这个问题不是强调任何语言,而是要求delphi解决方案并且它根本不适合竞争,尽管Peter在指导Google Research方面具有影响力.
[更新]
我被大卫的建议所启发,并研究了彼得页面的理论和惯例.这是一个非常粗略和低效的例程,与其他语言略有不同,我的是GUI.我是Delphi的初学者和学习者,我不敢发布我的完整代码(写得不好).我将概述我是如何做到的.欢迎您的评论,以便改进例程.
我的硬件和软件都很旧.这对我的工作来说已经足够了(我的专业不在于计算机或程序相关)
AMD Athlon Dual Core Processor
2.01 Ghz, 480 Memory
Windows XP SP2
IDE Delphi 7.0
Run Code Online (Sandbox Code Playgroud)
这是"正确"单词处理时间的快照和记录.我尝试使用Gettickcount,Tdatetime和Queryperformancecounter来跟踪单词的正确时间,但gettickcount和Tdatetime将为每次检查输出o ms,因此我必须使用Queryperformancecounter.也许还有其他方法可以更精确地做到这一点.
总行数为72,不包括记录检查时间的功能.如上所述,Marcelo的行数可能不是标准.该帖子讨论了如何以不同方式完成任务.SO的Delphi专家当然会使用最小线路来实现最佳性能.

procedure Tmajorform.FormCreate(Sender: TObject);
begin
loaddict;
end;
procedure Tmajorform.loaddict;
var
fs: TFilestream;
templist: TStringlist;
p1: tperlregex;
w1: string;
begin
//load that big.txt (6.3M, …Run Code Online (Sandbox Code Playgroud) 在delphi中有一个包含几个字段的列表视图.线程检查项目并将其添加到listview.如果有相同的标题,则会在此标题的子项中添加一个整数.当项目数小于2000时,性能良好.当检查和添加项目和项目计数超过约2000时,性能很差.当项目数量大于20,000时,性能可以描述为非常慢.当项目可能达到50,000或100,000时,有没有办法在listview中快速读写?
非常感谢你提前
编辑:
我们已经阅读了您的所有答案,并感谢您的帮助.
这是一个排序列表视图,在delphi中有50000个项目(字符串).如何快速搜索具有相同前缀单词的项目,然后跳过循环?
该列表如下:
aa.....
ab cd//from here
ab kk
ab li
ab mn
ab xy// to here
ac xz
...
Run Code Online (Sandbox Code Playgroud)
我的意思是如何快速查找和复制前缀为ab并跳过循环的项目.假设在二元搜索中得到一个ab项的索引.ab cd到ab xy的索引是通过二进制搜索得到的.
非常感谢你.
编辑:我们感谢所有人的回答.
如果customsort功能与变量传递的,现在看来,这将访问冲突.
public
...
col: integer;
...
Procedure listviewcol;
begin
col:=5
...
end;
procedure TForm1.sortcol(listview: tlistview);
function CustomSortProc(Item1,Item2: TListItem;
OptionalParam: integer): integer;stdcall;
begin
Result := AnsiCompareText(Item2.subitems.Strings[col], Item1.subitems.Strings[col]);
end;
begin
ListView.CustomSort(@CustomSortProc,0);
end;Run Code Online (Sandbox Code Playgroud)
这会提示错误.//访问冲突
但是如果我们将AnsicompareText中的col更改为5,那么它运行良好.
procedure TForm1.sortcol(listview: tlistview);
function CustomSortProc(Item1,Item2: TListItem;
OptionalParam: integer): integer;stdcall;
begin
Result := AnsiCompareText(Item2.subitems.Strings[5], Item1.subitems.Strings[5]);// it works.
end;
begin
ListView.CustomSort(@CustomSortProc,0);
end;
Run Code Online (Sandbox Code Playgroud)
如何解决它.请帮忙.非常感谢.
包含更改时间例程的程序在 Borland Delphi 7 IDE 中运行时确实会更改时间。但是当它独立运行(在Delphi IDE之外)时,它不会改变时间。我正在使用 Windows 7。你能帮忙吗?谢谢你。
...
procedure TForm1.changetime;
begin
DateSeparator:='-';
ShortDateFormat:='yyyy-MM-dd';
LongDateFormat:='yyyy''Year'',MM''Month'',dd''Date''';
TimeSeparator:=':';
DateTimetoString(date,'yyyy-mm-dd',now);
DateTimetoString(time,'hh:nn:ss',now);
cd:='2014-06-01 '+time;
d1:=StrToDateTime(cd);
DateTimeToSystemTime(d1,systemtime);
SetLocalTime(SystemTime);
end;
...
Run Code Online (Sandbox Code Playgroud) 昨天专家建议在线程执行函数中使用"while not terminated do begin ..."来检查线程终止属性并从内部优雅地退出线程.我们刚刚测试了代码,但它仍然无法终止线程.但是这个线程可以通过外部调用TerminateThread函数实际终止.执行函数或执行函数中的大循环中有一些缺陷吗?或者在使用非终止循环时是否有特殊要求?
顺便说一句,endthread,exitthread和terminatethread之间有什么区别?怎么用?哪个比较好?
再次感谢你的帮助.
正则表达式用于解析包含"="的文本,并将拆分字符串放入类似于键值对的字符串列表中.
但如果value包含'=',则不能使用list.add(key3 +'='+'number = 10');
key1 this's done
key2 that costs 10 dollars
key3 number=10 // invalid data, error prompt.
...
Run Code Online (Sandbox Code Playgroud)
怎么解决?谢谢.
编辑:
谢谢大家的帮助.
如果我必须在密钥中添加包含'='的字符串,我该如何解决?
例如,要解析的文本可能是这样的:
maleConsumer=john 1
maleConsumer=eric 2
femaleConsumer=mary 2
maleConsumer=john 8
...
Run Code Online (Sandbox Code Playgroud)
我使用regex reg ='\ b\S +\b'解析文本并将maleconsumer = john放入stringlist的键中,这样在stringlist中,john的记录将是:
maleConsumer=john 9 // maleconsumer=john is key, 9 is value
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我该怎么办?
再次感谢大家的帮助.