如果你有一套干净的Delphi代码,并且所有线程都是使用TThread创建的,你可以在构造函数方法(TThread.Create)中设置一个断点,并找出谁创建了你的线程.您甚至可以尝试使用Delphi TThread对象中内置的功能命名所有线程,该功能允许您为每个线程设置调试名称.
但是,如何确定持久的,难以发现的额外线程,这些线程仍然是匿名的(无调试名称),并且在模块初始化时出现,因为应用程序启动时.我可以单步执行模块初始化,但是我无法确定可能创建线程的所有源模块(例如,已完成的900多个模块初始化部分),我还没有想出办法添加一个调试消息(使用断点属性和消息),它将在初始化时转储每个单元名称.在System.pas中设置断点的创造性使用,使用logging-messages允许我在调试简单的简单应用程序时做一些事情,但是我的应用程序越复杂越多,我觉得线程越盲,两者都是在中间创建的应用程序运行,以及在模块初始化时创建的那些(即在您进入项目dpr中代码的第一行之前).
我想知道您可能找到哪些高级技术来识别和确定谁创建了特定线程.如果我们使用像GDB这样的调试器而不是像delphi IDE中内置的delphi调试器内核(Turbo Debugger?)这样的调试器,我认为我们可以在windows api函数上设置一个断点,比如BeginThread本身.但我不认为我能在Delphi中做到这一点.
更新:我不知道你可以在windows.pas的实现部分为kernel32.dll之类的外部windows dll设置一个断点.
更新2:似乎David H的回答是一般用途的最佳选择.我也正在研究一个我正在编写的小帮助代码库,它维护一个之前已经看过的线程id的字典,并根据它们的创建时间将一些调试名称分配给其他未命名的线程(函数是什么)我们在注意到新线程存在之前就已经调用了.我认为这将帮助我缩小40多个编号的线程,以便它们都被命名,即使其中一些是在外部C/C++ dll或COM进程中创建的.
我正在寻找一种可靠的方法来查找目录中的更改.
我尝试过使用FileSystemWatcher,但是当创建,更改或删除许多小文件时,它是相当不准确的.它错过了我测试中大约1%或2%的文件.当您快速添加或更改数千个文件时,这是非常重要的.
我已尝试以500毫秒,2000毫秒等不同时间间隔进行轮询更改.在这种情况下,我获得了太多的点击.这可能与FileInfo对象上的时间戳分辨率有关.
所以我的问题是; 是否可以使用.NET Framework可靠地获取对目录的更改?
- 基督徒
我的目标是能够创建一个可以包含如下项目的soap请求:
<flexFields>
<names>
<names>IAG Group</names>
<names>Ticket #</names>
</names>
</flexFields>
Run Code Online (Sandbox Code Playgroud)
然而,soapvar和soapparam的每一个组合我都能够想到要么让我无法复制嵌套的'names'标签.我可以像这样得到1个子标签:
$flexFields = array(
'names'=> new SoapVar(
new SoapVar(array('names'=>'IAG Group'),SOAP_ENC_OBJECT),
SOAP_ENC_OBJECT)
);
Run Code Online (Sandbox Code Playgroud)
这会产生:
<flexFields xsi:type="ns2:SoapNamedValues">
<names xsi:type="names">
<names xsi:type="xsd:string">IAG Group</names>
</names>
</flexFields>
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用SOAP_ENC_OBJECT,那么我为使name标签重复生成的任何尝试都会生成一个可怕的BOGUS元素,或者如果我使用SOAP_ENC_ARRAY,则包装另一个'item'元素中的每个项目,这也是不可取的.
我知道我可以手动创建我想要的东西并用XSD_ANYXML加载它,但这接近于破坏使用SOAP库的目的.
谁能提供一个如何完美平衡soapvar/soapparam +数组嵌套以使其实际工作的例子?或者我用PHP的SOAP库尝试不可能的事情?
假设这个输入XML
<?xml version="1.0" encoding="UTF-16"?>
<test></test>
Run Code Online (Sandbox Code Playgroud)
编写这些代码行:
StreamSource source = new StreamSource(new StringReader(/* the above XML*/));
StringWriter stringWriter = new StringWriter();
StreamResult streamResult = new StreamResult(stringWriter);
TransformerFactory.newInstance().newTransformer().transform(source, streamResult);
return stringWriter.getBuffer().toString();
Run Code Online (Sandbox Code Playgroud)
输出这个XML:
<?xml version="1.0" encoding="UTF-8"?>
<test></test>
Run Code Online (Sandbox Code Playgroud)
(声明的UTF- 16编码转换为默认的UTF- 8)
我知道我可以明确要求输出UTF-16
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-16");
Run Code Online (Sandbox Code Playgroud)
但问题是,如何使输出编码自动与输入相同?
我正在尝试将多个记录插入表中,但对每个记录使用相同的序列值.
这类似于:如何使用序列值将多行插入oracle?但是给出的答案会插入多个不同的序列号,并且我希望多个recs使用相同的序列号.
create table test1 (
col_a number,
col_b number
);
commit;
create sequence test_seq increment by 1 start with 2 minvalue 1 nocycle nocache noorder;
commit;
insert into test1 (col_a, col_b)
select a.object_id, test_seq.nextval from (
select object_id from all_objects where rownum < 5
) a;
commit;
Run Code Online (Sandbox Code Playgroud)
上面的问题是它检索并插入多个(不同的)"test_seq.nextval"值,我希望为每一行插入相同的值.
这甚至可以在直接sql中使用而不诉诸触发器(或多个sql语句)?相关问题的答案之一暗示可能不是,但我不清楚.
谢谢.
如果有帮助,我正在使用Oracle 11g.
我是WPF和MVVM的新手.在我ViewModel的项目集合中,例如:
class Item {
string Title {get; set;}
string Description {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个视图,所以在开始时我会:
Title1
Title2
Title3
Run Code Online (Sandbox Code Playgroud)
如果用户点击其中一个标题,它将展开以显示描述,例如:
Title1
Description1
Title2
Title3
Run Code Online (Sandbox Code Playgroud)
如果用户点击其他标题,则会有两个展开的项目:
Title1
Description1
Title2
Description2
Title3
Run Code Online (Sandbox Code Playgroud)
这可能非常类似于Expander控制,也许我可以使用它,但我正在以其他方式,以学习新的东西.
我应该为此目的使用什么控制?应该是ItemsControl或者可能ListBox吗?
我想,如果我使用ItemsControl,我应该扩展我的Item类,bool IsExpanded并将UI项可见性绑定到该值.但也许我可以使用ListBox并以某种方式将UI项目可见性绑定到...是的,对于什么?:)
我怎么能这么简单呢?
我如何重新加载页面,我确保我在我的班级顶部声明的变量不会被重置.IE我有一个最初设置为0的计数器如果我使用回发控制它重置该变量我如何在C#中没有发生这种情况?
我需要根据nvarchar(1000)列中的一些文本匹配过滤出记录.表有超过40万条记录并且还在增长.目前,我正在使用Like条件: -
SELECT
*
FROM
table_01
WHERE
Text like '%A1%'
OR Text like '%B1%'
OR Text like '%C1%'
OR Text like '%D1%'
Run Code Online (Sandbox Code Playgroud)
有没有首选的工作?
可能重复:
c# - 重复获取相同的随机数
随机数生成器不按照我计划的方式工作(C#)
我有一个构建int队列的方法:
public Queue<int> generateTrainingInts(int count = 60)
{
Queue<int> retval = new Queue<int>();
for (int i = 0; i < count; i++)
{
retval.Enqueue(JE_Rand.rInt(2001, 100));
}
return retval;
}
Run Code Online (Sandbox Code Playgroud)
JE_Rand.rInt()只是一个委托给Random类函数的函数:
public static int rInt(int exclUB, int incLB = 0)
{
Random rand = new Random(DateTime.Now.Millisecond);
int t = rand.Next(incLB, exclUB);
rand = null;
return t;
}
Run Code Online (Sandbox Code Playgroud)
但是当我调用generateTrainingInts时,每次都会将相同的数字排入队列.但是,如果我更改rInt以使用Random类的静态实例,而不是本地实例(具有上面定义的函数作用域),那么它似乎正常工作(排队随机整数).有人知道为什么会这样吗?
编辑:亲爱的答案者没有彻底阅读我的问题,就像你们中的一些人指出的那样,我正在寻找一个很好的解释为什么会发生这种情况.我不是在寻找同一数字生成问题的解决方案,因为我已经解决了,就像我上面所说的那样.感谢你的热情:)我真的只想了解这样的事情,因为我的第一次实现对我来说在概念上更有意义.
我在我的应用初始化(第一次)中有以下代码:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *uid=@"1";
[defaults setObject:uid forKey:@"init_val"];
[defaults synchronize];
Run Code Online (Sandbox Code Playgroud)
很久以后在代码中(响应按下按钮)我使用以下方法检查值:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *initVal=[defaults objectForKey:@"init_val"];
Run Code Online (Sandbox Code Playgroud)
initVal总是为零.我已经检查过,init_val在我的设置包中设置与我可以设置和读取的另一个字段完全相同(它们都设置了一个名为"Key"的字段).