我调用了第三方C++库,我已将其放入自己的线程中(目前使用的是NSThread).我想让用户能够停止执行该线程.(我很清楚这可能导致的所有问题,但我仍然希望这样做.)
根据Apple的线程编程指南,Cocoa有可能这样做.这对iPhone来说也是如此,还是我必须依靠Posix线程来实现我的目标?
干杯
MrMage
我是一个使用PHP的脚本语言解释器.我用这种脚本语言编写了这段代码:
write {Hello, World!} in either the color {blue} or {red} or {#00AA00} and in either the font {Arial Black} or {Monaco} where both the color and the font are determined randomly
Run Code Online (Sandbox Code Playgroud)
(是的,很难相信,但那是语法)
我必须使用哪个正则表达式来拆分它(用空格分割),但仅限于不在大括号内.所以我想把上面的代码转换成这个数组:
(大括号内的字符串以粗体显示在上面)大括号内的字符串必须是每个元素.所以{Hello,World!}不能:1.你好,2.世界!
我怎样才能做到这一点?
提前致谢.
我在弄清楚这个核心数据的东西时遇到了一些麻烦.如何创建具有唯一ID的新条目?在SQL中,我只将一个字段声明为自动增量字段.我在这里没有看到类似的东西,但我可能会遗漏一些东西.我只想要一个自动递增的NSInteger字段,所以当我手动将项添加到数据库时,我会有一些形式的引用.
更新:如果我从applicationDidFinishLaunching中调用archiveRootObject:如果我从singleton类的init:方法调用它,它返回nil.
我对NSKeyedUnarchiver unarchiveObjectWithFile的行为非常困惑.文档说如果文件不存在,它将返回nil.使用我的一个对象,会发生以下情况:
Game *g1 = [Game getGame];
NSString *archivePath = [Game getArchivePath];
bool success = [NSKeyedArchiver archiveRootObject:g1 toFile:archivePath];
Game *g2 = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];
// success is true, g2 is nil
Run Code Online (Sandbox Code Playgroud)
我已经验证该文件确实存在并且正由archiveRootObject:方法写入.我做错了什么阻止我将游戏对象从存档中取回?
我正在尝试运行以下查询,我遇到了通配符问题.
function getStudents() {
global $db;
$users = array();
$query = $db->prepare("SELECT id, adminRights FROM users WHERE classes LIKE ? && adminRights='student'");
$query->bind_param('s', '%' . $this->className . '%');
$query->execute();
$query->bind_result($uid, $adminRights);
while ($query->fetch()) {
if (isset($adminRights[$this->className]) && $adminRights[$this->className] == 'student')
$users[] = $uid;
}
$query->close();
return $users;
}
Run Code Online (Sandbox Code Playgroud)
我收到一条错误,指出:无法通过引用传递参数2.我需要使用通配符的原因是因为列的数据包含序列化数组.我想,如果有更简单的方法来解决这个问题,我该怎么办?
提前致谢!
我正在尝试将一个对象从一个控制器动作传递给另一个.我传递的对象或多或少看起来像这样:
public class Person
{
public string Name { get; set; }
public List<PhoneNumber> PhoneNumbers {get; set; }
public List<Address> Addresses { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的控制器看起来像这样:
public class DialogController : Controller
{
public ActionResult Index()
{
// Complex object structure created
Person person = new Person();
person.PhoneNumbers = new List();
person.PhoneNumbers.Add("12341324");
return RedirectToAction("Result", "Dialog", person);
}
public ActionResult Result(Person person)
{
string number = person.PhoneNumbers[0].ToString();
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
结果方法因空指针异常而失败,因为在使用RedirectToAction()方法调用Result操作后,PhoneNumbers列表突然为null.
以前有没有人见过这种行为?
干杯,
彼得
如何从我的应用程序中重用应用程序图标,这样我就不必将其嵌入两次(一次用于应用程序图标,一次用于内部使用)?
我正在考虑将数据库从Sql Server 2005移植到MySQL.
我已经习惯在存储过程中使用SQL Server的TRY/CATCH块.
MySQL是否有类似的东西,或者我将被迫回到旧学校"检查每个语句后的错误返回,如果失败则发出goto"编程风格?
好的,新手多线程问题:
我有一个Singleton类.该类有一个静态列表,基本上这样工作:
class MyClass {
private static MyClass _instance;
private static List<string> _list;
private static bool IsRecording;
public static void StartRecording() {
_list = new List<string>();
IsRecording = true;
}
public static IEnumerable<string> StopRecording() {
IsRecording = false;
return new List<string>(_list).AsReadOnly();
}
public MyClass GetInstance(){
}
public void DoSomething(){
if(IsRecording) _list.Add("Something");
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,用户可以调用StartRecording()来初始化List,然后对instance-method的所有调用都可以向列表添加内容.但是,多个线程可能会将实例保存到MyClass,因此多个线程可能会向列表中添加条目.
但是,列表创建和读取都是单个操作,因此多线程情况下通常的读写器问题不适用.我能看到的唯一问题是插入顺序很奇怪,但这不是问题.
我可以按原样保留代码,还是需要采取任何预防措施来进行多线程处理?我应该在实际应用程序中添加它不是字符串列表而是自定义对象列表(所以代码是_list.Add(新对象(somedata))),但这些对象只保存数据,除了调用之外没有代码到DateTime.Now.
编辑:澄清以下答案:DoSomething不能是静态的(这里的类是缩写的,有很多东西正在使用实例变量,但这些由构造函数创建,然后才读取).这样做是否足够好
lock(_list){
_list.Add(something);
}
and
lock(_list){
return new List<string>(_list).AsReadOnly();
}
Run Code Online (Sandbox Code Playgroud)
还是我需要一些更深层次的魔法?
iphone ×3
.net ×2
cocoa-touch ×2
php ×2
asp.net-mvc ×1
assemblies ×1
c# ×1
cocoa ×1
core-data ×1
icons ×1
java ×1
kill ×1
mysql ×1
mysqli ×1
objective-c ×1
preg-split ×1
regex ×1
reusability ×1
static ×1
wildcard ×1