问题列表 - 第41506页

使用Windows API在c中异步操作:使用哪种方法以及为什么我的代码执行同步?

我有一个C应用程序,它产生大量的输出,速度是至关重要的.该程序基本上是一个大型(8-12GB)二进制输入文件的循环,必须按顺序读取.在每次迭代中,处理读取的字节并生成输出并将其写入多个文件,但不会同时写入多个文件.因此,如果您处于生成输出的位置,并且有4个输出文件,则写入文件0或1或2,或3.在迭代结束时,我现在使用写入输出fwrite(),从而等待写入操作完成.输出操作总数很大,每个文件最多400万,文件输出大小从100mb到3.5GB不等.该程序在基本的多核处理器上运行.

我想在一个单独的线程中写输出,我知道这可以完成

  1. 异步I/O.
  2. 创建线程
  3. I/O完成端口

我有两类问题,即概念和特定代码.

概念性问题

什么是最好的方法.请注意,应用程序应该可以移植到Linux,但是,我不知道这对于我选择的1-3是多么重要,因为我会编写一个关于任何内核/ API特定的包装器.对我来说,最重要的标准是速度.我已经读过,选项1不太可能提高程序的性能,并且内核在任何情况下都会为i/o操作创建新的线程,那么为什么不立即使用选项(2)并具有看似它的优势更容易编程(因为我没有使用选项(1)成功,请参阅下面的代码问题).

请注意,我阅读/sf/ask/258283161/,但我没有看到使用什么的动机基于应用程序的性质.所以我希望有人能给我一些建议,在我的情况下最好.同样来自Johnson M. Hart的书"Windows系统编程",我知道推荐使用线程,主要是因为简单.但是,它也会最快吗?

代码问题

这个问题涉及我迄今为止进行异步I/O工作的尝试.我知道它是一大段代码,所以它不容易调查.无论如何,我真的很感激任何尝试.

为了减少执行时间我试着通过编写使用WINAPI一个新的线程的方式输出CreateFile()FILE_FLAGGED_OVERLAP具有重叠结构.我已经创建了一个示例程序,我试图让它工作.但是,我遇到了两个问题:

  1. 该文件只在重叠模式打开,当我删除一个已经存在的文件(我已经尝试使用CreateFile不同的模式(CREATE_ALWAYS,CREATE_NEW,OPEN_EXISTING),但这并不能帮助).

  2. 只有第一个WriteFile是异步执行的.其余WriteFile命令是同步的.对于这个问题,我已经咨询过http://support.microsoft.com/kb/156932.似乎我遇到的问题与"对扩展其长度的文件的任何写操作将是同步的"这一事实有关.我已经尝试通过增加文件大小/有效数据大小(代码中的注释区域)来解决这个问题.但是,我仍然没有让它工作.我知道的事实,它可能是得到最有效地利用异步IO的我应该的情况下CreateFileFILE_FLAG_NO_BUFFERING,但是我不能让这个为很好地工作.

请注意,程序在执行路径中创建一个大约120mb的文件.另外请注意,打印报表"不正常"不desireable,我想看看"可以做后台工作"出现在我的屏幕上......错在这里?

#include <windows.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ASYNC  // remove this definition to run synchronously (i.e. using fwrite)

#ifdef ASYNC
    struct _OVERLAPPED *pOverlapped;
    HANDLE *pEventH;
    HANDLE *pFile;
#else
    FILE *pFile;
#endif

#define …
Run Code Online (Sandbox Code Playgroud)

c io winapi multithreading asynchronous

8
推荐指数
1
解决办法
2819
查看次数

winForms中的radiobutton样式?

嘿,我只是想知道每个人在winForms中用来设置单选按钮的方法.我发现它们非常简单,并且想为控件添加一些颜色或不同的图像.我能想到的唯一方法是实际使用看起来像radiobutton的按钮,并将其设置为true或false.

只是想知道我是否有办法做到这一点,但仍然使用无线电控制.

c# user-interface coding-style winforms

1
推荐指数
1
解决办法
7931
查看次数

为什么eclipse不会在结果列表中的文件内显示搜索结果?

我们有一个Eclipse安装,它没有像所有其他安装一样显示搜索结果发生的各个行,如下所示:

替代文字

我们如何启用此功能以显示每行中的单个结果?

eclipse search

8
推荐指数
1
解决办法
3378
查看次数

如何在单独的XML文件中定义map属性(在Spring中)?

假设一个项目使用Spring并在XML中定义它的bean?它有一些bean在构造函数中接受Map.

通常,此映射被定义为bean下的属性,并在其下具有条目.

但如果参赛名单很大呢?它将使XML大量繁荣......

是否(地图)可以在XML文件中以某种方式定义,然后由需要它的bean进行重新引用?怎么样 ?

spring code-injection

10
推荐指数
1
解决办法
2万
查看次数

NFA到DFA转换的简洁描述?

有人可以比我更简洁地向SO社区描述NFA到DFA的转换算法吗?(最好是500字以内.)我见过的图表和讲座只会让我以为我曾经认识的东西感到困惑.我最有信心从状态图生成初始NFA转换表,但之后,我丢失了epsilons和子集中的DFA.

1)在转换(delta)表中,哪一列代表新的DFA状态?它是生成状态的第一列吗?

2)在下面我的例子的第{2,3}行中,{2,3}在状态图方面对NFA的意义是什么?(对不起,我必须在图片中思考.)我认为这将是DFA中的"输入0回环"?

3)从表格到DFA或识别所得到的DFA的接受状态的任何简单的"经验法则"?

有限自治

delta  |  0    |  1     |
=======+=======+========+
{1}    |{1}    |{2}     |
{2}    |{3}    |{2,3}   |
{3}    |{2}    |{2,4}   |
{2,3}  |{2,3}  |{2,3,4} |
{2,4}  |{3,4}  |{2,3,4} |
{2,3,4}|{2,3,4}|{2,3,4} |
{3,4}  |{2,4}  |{2,4}   |
Run Code Online (Sandbox Code Playgroud)

编辑:这是上面的点格式表,欢呼Regexident.

digraph dfa {
    rankdir = LR;
    size = "8,5"
/*  node [shape = doublecircle]; "1";*/
    node [shape = circle];

    "1" -> "1" [ label = "0" ];
    "1" -> "2" [ label = "1" ];

    "2" -> "3"   [ …
Run Code Online (Sandbox Code Playgroud)

algorithm finite-automata dfa nfa

10
推荐指数
2
解决办法
3912
查看次数

如何在phing中迭代(循环)目录?

我想为一些插件创建phing任务,所以目录结构是这样的

root
  - plugin1
    - index.php
  - plugin2
    - index.php
Run Code Online (Sandbox Code Playgroud)

等等..

我想在每个子目录上运行相同的任务 - 例如

  1. 为plugin1生成doc
  2. 运行plugin1的单元测试
  3. 在某处部署plugin1
  4. 为plugnin2生成doc ...

这可能吗?我需要类似的东西

<foreach param="filename" absparam="absfilename" target="subtask">
  <fileset dir=".">
    <include name="*.php"/>
  </fileset>
</foreach>
Run Code Online (Sandbox Code Playgroud)

但对于目录.

或者我是否必须为每个插件独立编写build.xml?

非常感谢.

phing

4
推荐指数
1
解决办法
3763
查看次数

Android不尊重颜色!

试图调整存储在我的SD卡上的图像的大小,我注意到原始颜色在哪里被改变了.它接缝BitmapFactory.decodeFile对此负责.这是一个演示代码:

private void testImage() throws Exception{
    BitmapFactory.Options o = new BitmapFactory.Options();
    o.inDither = false;
    o.inPreferredConfig = Bitmap.Config.ARGB_8888;
    o.inScaled = false;
    Bitmap b = BitmapFactory.decodeFile("/sdcard/test/original.jpg", o);
    b.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream("/sdcard/test/result.jpg"));
    b.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream("/sdcard/test/result.png"));
}
Run Code Online (Sandbox Code Playgroud)

结果图像(original.jpg,result.jpg,result.png):

替代文字替代文字替代文字

你有没有看到,男孩的皮肤在2张图片上有点绿.解决这个问题的任何提示?

android bitmap

6
推荐指数
1
解决办法
297
查看次数

Ruby 1.9.2如何在Windows上安装RMagick?

我目前正在升级一个旧的rails应用程序以使用Rails 3和Ruby 1.9.2,而RMagick是我需要安装的最后一个gem.但是,Windows似乎没有任何1.9.2下载,标准的gem安装RMagick也不起作用.

有人能指出我如何安装这个宝石的正确方向吗?

ruby gem ruby-on-rails

17
推荐指数
3
解决办法
2万
查看次数

如何与Windows服务进行通信?

我想创建一个Windows服务,验证数据并从另一个Windows应用程序访问它,但我是新的服务,我不知道如何开始.

因此,在服务运行时,Windows应用程序应以某种方式连接到服务,发送一些数据并获得响应,无论是真还是假.

c# windows-services ipc

32
推荐指数
3
解决办法
5万
查看次数

我应该检查WebClient.UploadFile的响应以了解上传是否成功?

我之前从未使用过WebClient,我不确定是否应该检查来自服务器的响应,以了解上传是否成功,或者如果没有异常我是否可以将文件设置为已上传.

如果我应该检查响应我该怎么做?解析resposeHeaders属性?

提前致谢.

c# upload webclient response

10
推荐指数
1
解决办法
1万
查看次数