小编ale*_*gle的帖子

如何找到当前系统时区?

在Linux上,我需要找到当前配置的时区作为Olson位置.我希望我的(C或C++)代码可以移植到尽可能多的Linux系统.

例如.我住在伦敦,所以我现在的奥尔森位置是"欧洲/伦敦".我对时区ID 感兴趣,比如"BST","EST"等等.

Debian和Ubuntu有一个/etc/timezone包含这些信息的文件,但我认为我不能依赖那个文件,我可以吗?Gnome有一个函数oobs_time_config_get_timezone()也返回正确的字符串,但我希望我的代码可以在没有Gnome的系统上运行.

那么,在Linux上获得当前配置的时区作为Olson位置的最佳通用方法是什么?

c c++ linux timezone

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

为什么我要启动一个"暂停"的线程?

Windows和Solaris线程API都允许以"挂起"状态创建线程.线程实际上只在以后"恢复"时启动.我已经习惯了没有这个概念的POSIX线程,而且我很难理解它的动机.任何人都可以建议为什么创建一个"暂停"线程会有用吗?

这是一个简单的说明性示例.WinAPI允许我这样做:

t = CreateThread(NULL,0,func,NULL,CREATE_SUSPENDED,NULL);
// A. Thread not running, so do... something here?
ResumeThread(t);
// B. Thread running, so do something else.
Run Code Online (Sandbox Code Playgroud)

(简单的)POSIX等价似乎是:

// A. Thread not running, so do... something here?
pthread_create(&t,NULL,func,NULL);
// B. Thread running, so do something else.
Run Code Online (Sandbox Code Playgroud)

有没有人有任何现实世界的例子,他们能够在A点(在CreateThread和ResumeThread之间)做一些事情,这在POSIX上会很困难?

c c++ multithreading

14
推荐指数
3
解决办法
5724
查看次数

如果我ReleaseMutex()两次会怎么样?

Microsoft文档没有提及如果我ReleaseMutex() 在互斥锁已经解锁时错误地调用会发生什么.

细节:

我试图修复一些Windows代码而无需访问编译器.

我意识到WinApi互斥体都是递归的,并且是引用计数的.如果我正在使用该功能,很明显额外的ReleaseMutex()调用会过早地减少参考计数器.

但是,我正在查看的代码不会递归使用互斥锁,因此引用计数永远不会高于"1".它确实释放了多次互斥量...所以会发生什么?引用计数是否为负数?它是否保持零(解锁)并返回一个可忽略的错误?

(当然,这个代码在调用这些函数时实际上并没有检查错误!)

c++ winapi multithreading mutex

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

标签 统计

c++ ×3

c ×2

multithreading ×2

linux ×1

mutex ×1

timezone ×1

winapi ×1