我有快速的线程问题.我有一个包含一些对象的数组.在委托上,类每秒都会获得新对象.之后我必须检查对象是否已经在数组中,所以我必须更新对象,否则我必须删除/添加新对象.
如果我添加一个新对象,我必须首先通过网络获取一些数据.这是handelt经过一个街区.
现在我的问题是,如何同步这项任务?
我尝试了一个dispatch_semaphore,但是这个阻止了UI,直到块完成.
我还尝试了一个简单的bool变量,它检查块当前是否执行并同时跳过compare方法.
但这两种方法都不理想.
什么是管理阵列的最佳方式,我不想在阵列中有重复的数据.
我正在寻找一个读/写.xls(而不是.xlsx)文件的Excel库.
我正在使用excellibrary,但它非常多,我似乎无法打开我创建的文件.该问题已有近一年的历史,尚未得到修复.
我在另一个线程中看到有人建议使用EPPlus,但这只适用于2007/2010 .xlsx格式.
我过去曾经使用过Koogra,对它很满意,但我相信它只能读...不写.
如果您知道图书馆,请告诉我它的名称.
编辑:我很高兴用必要的内置Microsoft.Office.Interop.Excel创建我的Excel文件,但是我的机器有Office 2007而目标机器只有Office 2003.我注意到我有2个文件版本那个库:12和14.我检查了目标机器上的Excel版本,它是11.8169.8172 - 我假设内置的Excel互操作不能在目标上运行?
假设我有一个二进制值为11111111的字节b
例如,我如何读取从第二位开始的3位整数值或从第五位开始写入4位整数值?
是否可以在不使用COM对象的情况下在PHP中读取和写入Word(2003和2007)文件?我知道我可以:
$file = fopen('c:\file.doc', 'w+');
fwrite($file, $text);
fclose();
Run Code Online (Sandbox Code Playgroud)
但Word会将其读作HTML文件而不是本机.doc文件.
我知道有一些与此相关的问题,但它们都在Objective-C中.
如何在实际的iPhone上.txt使用Swift 访问我的应用程序中包含的文件?我希望能够从中读取和写入.如果你想看一下,这是我的项目文件.如有必要,我很乐意添加细节.
我撇了一些Grails文档,发现这一点关于read()Grails的方法.如果我正确理解了这一点,您可以从数据库中提取一个只读对象的"只读"版本,该版本只会在显式save()调用中保存.在我看来,read()只要你有一个你不希望被改变的对象,就应该使用一个调用.
但为什么你不会总是使用read()电话?因为save()无论如何,对象将被更改为读/写权限,仅仅读取对象而不是获取它是不是更安全?
是否可以在不使用COM对象的情况下读取和编写Python中的Word(2003和2007)文件?
我知道我可以:
f = open('c:\file.doc', "w")
f.write(text)
f.close()
Run Code Online (Sandbox Code Playgroud)
但Word会将其读作HTML文件而不是本机.doc文件.
我想将给定的块添加到数组中,然后在请求时运行数组中包含的所有块.我有类似这样的代码:
class MyArrayBlockClass {
private var blocksArray: Array<() -> Void> = Array()
private let blocksQueue: NSOperationQueue()
func addBlockToArray(block: () -> Void) {
self.blocksArray.append(block)
}
func runBlocksInArray() {
for block in self.blocksArray {
let operation = NSBlockOperation(block: block)
self.blocksQueue.addOperation(operation)
}
self.blocksQueue.removeAll(keepCapacity: false)
}
}
Run Code Online (Sandbox Code Playgroud)
问题在于可以跨多个线程调用addBlockToArray.发生的事情是addBlockToArray在不同的线程中快速连续调用,并且只附加其中一个项目,因此在runBlocksInArray期间不会调用另一个项目.
我尝试过这样的东西,但似乎不起作用:
private let blocksDispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
func addBlockToArray(block: () -> Void) {
dispatch_async(blocksDispatchQueue) {
self.blocksArray.append(block)
}
}
Run Code Online (Sandbox Code Playgroud) arrays multithreading read-write grand-central-dispatch swift
我工作的分配,其中一个程序把文件描述符作为参数(一般在exec调用父),并从文件中读取和写入文件的描述符,并在我的测试中,我意识到,程序会工作从命令行开始,如果我使用0,1或2作为文件描述符,则不会出错.这对我来说很有意义,除了我可以写入stdin并让它显示在屏幕上.
对此有解释吗?我一直认为在stdin/stdout上有一些保护,你当然不能从stdout到stdin或fgetsf.
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
char message[20];
read(STDOUT_FILENO, message, 20);
write(STDIN_FILENO, message, 20);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我尝试在bash中使用读/写文件描述符,以便我可以删除文件描述符后面引用的文件,如下所示:
F=$(mktemp)
exec 3<> "$F"
rm -f "$F"
echo "Hello world" >&3
cat <&3
Run Code Online (Sandbox Code Playgroud)
但该cat命令没有输出.如果我使用单独的文件描述符进行读写,我可以实现我想要的:
F=$(mktemp)
exec 3> "$F"
exec 4< "$F"
rm -f "$F"
echo "Hello world" >&3
cat <&4
Run Code Online (Sandbox Code Playgroud)
打印Hello world.
我怀疑当你从写入切换到读取时,bash不会自动寻找文件描述符的开头,以下bash和python代码的组合证实了这一点:
fdrw.sh
exec 3<> tmp
rm tmp
echo "Hello world" >&3
exec python fdrw.py
Run Code Online (Sandbox Code Playgroud)
fdrw.py
import os
f = os.fdopen(3)
print f.tell()
print f.read()
Run Code Online (Sandbox Code Playgroud)
这使:
$ bash fdrw.sh
12
$ # This is the prompt reappearing
Run Code Online (Sandbox Code Playgroud)
有没有办法实现我想要的只是使用bash?