小编Gyö*_*sek的帖子

如何在不阻塞的情况下查明goroutine是否已完成?

到目前为止我见过的所有例子都涉及阻塞以获得结果(通过<-chan运算符).

我当前的方法涉及将指针传递给结构:

type goresult struct {
    result resultType;
    finished bool;
}
Run Code Online (Sandbox Code Playgroud)

goroutine在完成后写的.然后,finished只要方便,就可以轻松检查.你有更好的选择吗?

我真正的目标是Qt风格的信号槽系统.我有预感,解决方案看起来几乎是微不足道的(chan许多未探索的潜力),但我还不熟悉这种语言来解决它.

go signals-slots goroutine

8
推荐指数
3
解决办法
4850
查看次数

强制goroutine进入同一个线程

有没有办法确保goroutine只能在特定的OS线程中运行?例如,当GUI操作必须在GUI线程中运行时,可能存在多个运行GUI代码的goroutine.

GOMAXPROCS(1) 在技​​术上做的工作,但这违背了多线程的目的.

LockOSThread() 也工作,但这也阻止任何其他goroutine在该线程中运行.

有没有办法做到这一点,或者所有需要相同线程的东西也必须在同一个goroutine中运行?

go goroutine

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

内存访问的成本是多少?

我们认为内存访问是快速且持续的,但在现代架构/操作系统上,这不一定是真的.

考虑以下C代码:

int i = 34;
int *p = &i;

// do something that may or may not involve i and p

{...}

// 3 days later:

*p = 643;
Run Code Online (Sandbox Code Playgroud)

如果,CPU指令中最后一次分配的估计成本是多少?

  • i 在L1缓存中,
  • i 在L2缓存中,
  • i 在L3缓存中,
  • i 在RAM中,
  • i 被分页到SSD磁盘,
  • i 被分页到传统磁盘?

还有什么地方可以i

当然这些数字并不是绝对的,但我只对数量级感兴趣.我尝试搜索网络,但谷歌这次没有给我保佑.

language-agnostic memory hardware

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

Haskell源编码

Haskell 2010语言报告说:

Haskell使用Unicode [2]字符集.但是,源程序目前偏向于早期版本的Haskell中使用的ASCII字符集.

这是否意味着UTF-8?

在ghc-7.0.4/compiler/parser/Lexer.x.source中:

$unispace    = \x05 -- Trick Alex into handling Unicode. See alexGetChar.
$whitechar   = [\ \n\r\f\v $unispace]
$white_no_nl = $whitechar # \n
$tab         = \t

$ascdigit  = 0-9
$unidigit  = \x03 -- Trick Alex into handling Unicode. See alexGetChar.
$decdigit  = $ascdigit -- for now, should really be $digit (ToDo)
$digit     = [$ascdigit $unidigit]

$special   = [\(\)\,\;\[\]\`\{\}]
$ascsymbol = [\!\#\$\%\&\*\+\.\/\<\=\>\?\@\\\^\|\-\~]
$unisymbol = \x04 -- Trick Alex into handling Unicode. See alexGetChar.
$symbol    = [$ascsymbol $unisymbol] …
Run Code Online (Sandbox Code Playgroud)

encoding haskell

7
推荐指数
2
解决办法
899
查看次数

C++标准中最令人惊讶的元素是什么?

我决定更熟悉我最喜欢的编程语言,但阅读标准很无聊.

什么是最令人惊讶,反直觉,或只是简单的C++元素?令你震惊的是你跑到最近的编译器检查它是否真的如此?

我会接受第一个答案,即使我测试之后我也不会相信.:)

c++

6
推荐指数
4
解决办法
678
查看次数

你会如何开始自动化我的工作?- 第2部分

(跟进这个问题)

在第一波进货(9小时复印/粘贴)后幸存下来,我现在相信我有所有要求.

这是更新的工作流程:

  • Monkey收集电子邮件附件(4个Excel电子表格,1个PDF)
  • Monkey创建中央数据库,进行复杂的计算(现在这也是一个Excel电子表格)
  • Monkey将数据发送给两位老板,他们独立设定零售价格; 第一个回复胜利
  • Monkey将订单发送到我们的其他仓库,也包括Excel
  • Monkey向VIP客户发送电子表格,仔细清理和格式化(4种不同的折扣类别)
  • Jurily将数据输入会计系统.我放弃了自动化这个部分,涉及太多的业务逻辑,数据库是一堆sh ^ W遗产

我的问题:您将使用哪些技术来快速而肮脏的解决方案?我主要是在C#上销售,但是来自Linux/C++背景,我对我在Microsoft-land中的选择感到非常困惑.

奖励积分:您如何从头开始重新设计整个系统?

澄清:我正在寻找任何有可能让我阅读正确的东西的东西,只需给我关键词和简短描述.谷歌将从那里引导我.

如果您想知道PS,我的职称是系统管理员.

c# windows excel automation

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

为什么RAII和垃圾收集是互斥的?

虽然我认为我理解问题的要点(即一个好的GC跟踪对象,而不是范围),但我不太了解该主题以说服其他人.

你能否解释为什么没有垃圾收集语言和确定性析构函数?

language-agnostic garbage-collection raii

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

原子删除大量文件

我试图一次删除10000多个文件,原子地,例如,所有文件都需要立即删除,或者都需要留在原地.

当然,显而易见的答案是将所有文件移动到一个临时目录中,并在成功时以递归方式删除它,但这会使所需的I/O量翻倍.

压缩不起作用,因为1)我不知道哪些文件需要删除,2)文件需要经常编辑.

有什么可以帮助降低I/O成本吗?任何平台都可以.

编辑:我们假设任何时候都可能发生停电.

c c++ io file atomic

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

不能在字段值中将(* struct)用作(* interface)

我有以下代码:

// eventloop.go
type Object interface {
    ActivateSlot(name string, parameters vector.Vector);
}



// main.go
import loop "./eventloop"

// ...

const slotname = "printer"

type printer struct {
    slot loop.Slot;
}

func (p *printer) Init() {
    p.slot = loop.Slot{slotname, p}; // offending line
}

func (p *printer) ActivateSlot(name string, parameters vector.Vector) {
    fmt.Println("Slot called: ", name); 
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,出现以下错误:

jurily@jurily ~/workspace/go $ ./build.sh
main.go:23: cannot use p (type *printer) as type *eventloop.Object in field value
Run Code Online (Sandbox Code Playgroud)

如果我将有问题的行注释掉,它将编译并运行良好。这里发生了什么事?我想念什么?

interface go

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

嵌入文件更改后的 Cabal 重建

我因此使用文件嵌入包:

import qualified Data.ByteString as B
import qualified Data.ByteString.Internal as B (w2c)
import qualified Data.FileEmbed as E

initWindow = do
    b <- Gtk.builderNew
    let glade = map B.w2c $ B.unpack $ $(E.embedFile "window.glade") in
        Gtk.builderAddFromString b glade
    ...
Run Code Online (Sandbox Code Playgroud)

即使只有林间空地文件发生变化,是否也可以使 cabal 重建此文件?

rebuild haskell cabal

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

使用命名参数会有额外的运行时成本吗?

考虑以下结构:

    public struct vip
    {
        string email;
        string name;
        int category;

        public vip(string email, int category, string name = "")
        {
            this.email = email;
            this.name = name;
            this.category = category;
        }
    }
Run Code Online (Sandbox Code Playgroud)

以下两个电话之间是否存在性能差异?

var e = new vip(email: "foo", name: "bar", category: 32);

var e = new vip("foo", 32, "bar");
Run Code Online (Sandbox Code Playgroud)

如果没有定义可选参数,是否有区别?

c#-4.0

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

什么是最简洁的字节级操作方法?

我从服务器的源代码中获得了以下C结构,并且有许多类似的结构:

// preprocessing magic: 1-byte alignment

typedef struct AUTH_LOGON_CHALLENGE_C
{
    // 4 byte header
    uint8   cmd;
    uint8   error;      
    uint16  size;       

    // 30 bytes
    uint8   gamename[4];
    uint8   version1;
    uint8   version2;
    uint8   version3;
    uint16  build;
    uint8   platform[4];
    uint8   os[4];
    uint8   country[4];
    uint32  timezone_bias;
    uint32  ip;
    uint8   I_len;

    // I_len bytes
    uint8   I[1];
} sAuthLogonChallenge_C;

// usage (the actual code that will read my packets): 
sAuthLogonChallenge_C *ch = (sAuthLogonChallenge_C*)&buf[0]; // where buf is a raw byte array
Run Code Online (Sandbox Code Playgroud)

这些是TCP数据包,我需要实现一些在C#中发送和读取它们的东西.最干净的方法是什么?

我目前的做法涉及到

[StructLayout(LayoutKind.Sequential, Pack = 1)] …
Run Code Online (Sandbox Code Playgroud)

c# byte bytearray marshalling

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