在C++中,struct和class之间的区别很小,基本上只有struct成员是默认的public,而class member是默认的private.
但是,每当我需要纯数据结构时,我仍然使用结构,例如:
struct Rectangle {
int width;
int height;
};
Run Code Online (Sandbox Code Playgroud)
我觉得使用非常方便:
Rectangle r;
r.width = 20;
r.height = 10;
Run Code Online (Sandbox Code Playgroud)
但是,数据结构来自过程编程,我正在进行面向对象的编程.将这个概念引入OO是一个坏主意吗?
我需要创建一个文件列表,这些文件位于我的硬盘上,按照它们到达硬盘的顺序.为此,我使用了以下内容:
ls -lat
Run Code Online (Sandbox Code Playgroud)
它列出了日期/时间顺序中的所有文件,但是,它只将它们排序到最近的秒.这里的问题是有成千上万的文件,每隔一段时间,其中一些文件在同一秒内聚集在一起.我需要的确切正确的顺序.我猜测最简单的方法是将创建时间延长到毫秒(或者纳米)秒.为此,我尝试使用以下内容:
stat $myfile
Run Code Online (Sandbox Code Playgroud)
查看修改时间,但它始终显示小时:分钟:秒00000000000.
有没有办法做到这一点?谢谢,Rik
我的应用程序遇到了一个奇怪的问题,它的内存使用量时不时地上升几百兆,最终应用程序冻结了.该应用程序是用Delphi编写的,它使用数据库,COM(用于OPC)和TCP/IP.
使用FastMM,我已经关注了内存使用情况的屏幕截图.我不完全确定如何读取该表,但看起来有些东西已经分配了296463552个字节(0x100fb000,这是"幻数"?)三次.

有任何想法吗?有没有办法跟踪非Delphi-MM内存分配?
我正在使用Delphi 2007和FastMM 4.96.
编辑:
我使用IMallocSpy编写了一个小助手类来跟踪COM内存分配.这是我得到的摘录:
00119023 5:52:27.484 [4496] TCOMAllocSpy.PreRealloc size: 269462304
00119024 5:52:27.734 [4496] (0002760C){ntdll.dll } [7C82860C] KiFastSystemCallRet + $0
00119025 5:52:27.734 [4496] (0009F83A){MyApp.exe} [004A083A] JclDebug.JclCreateThreadStackTrace (Line 3943, "JclDebug.pas" + 7) + $1E
00119026 5:52:27.734 [4496] (003D496A){MyApp.exe} [007D596A] ComLeakHelper.TCOMAllocSpy.DebugStack (Line 46, "ComLeakHelper.pas" + 2) + $9
00119027 5:52:27.734 [4496] (003D4B52){MyApp.exe} [007D5B52] ComLeakHelper.TCOMAllocSpy.PreRealloc (Line 125, "ComLeakHelper.pas" + 4) + $2
00119028 5:52:27.734 [4496] (000053B6){MyApp.exe} [004063B6] System.@WStrAsg (Line 14090, "sys\system.pas" + 10) + $0
00119029 5:52:27.734 [4496] (002E4490){MyApp.exe} [006E5490] …Run Code Online (Sandbox Code Playgroud) 我想以谷歌即时方式做一些与Mx相同的事情.因此,当我键入正则表达式时,它将显示所有匹配项.与Mx iseaerch-forward-regexp相比,这会有所不同,因为匹配将显示在不同的缓冲区中,而不是相同的缓冲区.
有什么等价的吗?
谢谢.
是否可以将参数传递给SQL Server脚本?我有一个创建数据库的脚本.它是使用sqlcmd从批处理文件中调用的.该SQL脚本的一部分如下:
CREATE DATABASE [SAMPLE] ON PRIMARY
( NAME = N'SAMPLE', FILENAME = N'c:\dev\SAMPLE.mdf' , SIZE = 23552KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'SAMPLE_log', FILENAME = N'c:\dev\SAMPLE_log.ldf' , SIZE = 29504KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
Run Code Online (Sandbox Code Playgroud)
我希望能够传递数据库和日志的文件名,这样我就不必硬编码'C:\ dev\SAMPLE.mdf'和'C:\ dev\SAMPLE_log.ldf'.
有没有办法做到这一点?我正在运行Microsoft SQL Server 2008 Express.如果您需要更多信息,请与我们联系.
给定.ppt格式的PowerPoint演示文稿,以编程方式和仅使用开源软件提取演示文稿中每张幻灯片的图像表示(例如.jpg或者.png)的最佳方法是什么?
该应用程序将在Linux服务器环境中运行,因此无法安装Microsoft Office或Keynote.
我想以编程方式实现的功能类似于:
File > Export... > Pictures > JPEG)Save As > Other Formats > JPEG)我正在学习WCF,现在我在运行应用程序时遇到一个异常:异常:
无法在ServiceModel客户端配置部分中找到引用合同"IService1"的默认端点元素.这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与此合同匹配的端点元素.
服务代码:
namespace StockService
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
public class Service1 : IService1
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
public CompositeType GetDataUsingDataContract(CompositeType composite)
{
if (composite == null)
{
throw new ArgumentNullException("composite");
}
if (composite.BoolValue)
{
composite.StringValue += "Suffix";
}
return composite;
}
public string GetCompositedata()
{
CompositeType ct = new …Run Code Online (Sandbox Code Playgroud) 我有一个大约1000个单整数的列表.我需要能够进行一些数学计算,但它们会被列入列表或字符形式.如何切换它们以便它们可用?
样本数据:
> y [[1]]
[1] "7" "3" "1" "6" "7" "1" "7" "6" "5" "3" "1" "3" "3" "0" "6" "2" "4" "9"
[19] "1" "9" "2" "2" "5" "1" "1" "9" "6" "7" "4" "4" "2" "6" "5" "7" "4" "7"
[37] "4" "2" "3" "5" "5" "3" "4" "9" "1" "9" "4" "9" "3" "4" "9" "6" "9" "8"
[55] "3" "5" "2" "0" "3" "1" "2" "7" "7" "4" "5" "0" "6" "3" "2" "6" "2" …Run Code Online (Sandbox Code Playgroud) 我已经像这样创建了synchronized arrayList
import java.text.SimpleDateFormat;
import java.util.*;
class HelloThread
{
int i=1;
List arrayList;
public void go()
{
arrayList=Collections.synchronizedList(new ArrayList());
Thread thread1=new Thread(new Runnable() {
public void run() {
while(i<=10)
{
arrayList.add(i);
i++;
}
}
});
thread1.start();
Thread thred2=new Thread(new Runnable() {
public void run() {
while(true)
{
Iterator it=arrayList.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
});
thred2.start();
}
}
public class test
{
public static void main(String[] args)
{
HelloThread hello=new HelloThread();
hello.go();
}
}
Run Code Online (Sandbox Code Playgroud)
但是像这样得到例外
线程"Thread-1"中的异常java.util.ConcurrentModificationException
我的方法有什么不对吗?
我正在使用没有日志记录的旧Java应用程序,只是将所有信息打印到控制台.通过执行printStackTrace()调用也可以"处理"大多数异常.
简而言之,我只是将System.out和System.error流重定向到日志文件,现在我需要解析该日志文件.到目前为止一切都很好,但我在尝试解析堆栈跟踪的日志文件时遇到问题.
一些代码也被遮挡了,所以我需要通过实用程序应用程序运行堆栈跟踪来去除它们.我正在尝试自动完成所有这些.
我到目前为止最接近的是使用以下方法获取最初的Exception行:
.+Exception[^\n]+
Run Code Online (Sandbox Code Playgroud)
并使用以下方法找到"at ..(..)"行:
(\t+\Qat \E.+\s+)+
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何将它们组合在一起以获得完整的堆栈跟踪.
基本上,日志文件看起来如下所示.没有固定的结构,堆栈跟踪之前和之后的行是完全随机的:
Modem ERROR (AT
Owner: CoreTalk
) - TIMEOUT
IN []
Try Open: COM3
javax.comm.PortInUseException: Port currently owned by CoreTalk
at javax.comm.CommPortIdentifier.open(CommPortIdentifier.java:337)
...
at UniPort.modemService.run(modemService.java:103)
Handling file: C:\Program Files\BackBone Technologies\CoreTalk 2006\InputXML\notify
java.io.FileNotFoundException: C:\Program Files\BackBone Technologies\CoreTalk 2006\InputXML\notify (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
...
at com.gobackbone.Store.a.a.handle(Unknown Source)
at com.jniwrapper.win32.io.FileSystemWatcher.fireFileSystemEvent(FileSystemWatcher.java:223)
...
at java.lang.Thread.run(Unknown Source)
Load Additional Ports
... Lots of random stuff
IN []
[Fatal Error] .xml:6:114: The …Run Code Online (Sandbox Code Playgroud)