在Windows 8中使用花哨的新任务管理器我发现了一些令我惊讶的东西,当前使用/正在运行的线程大约1k.
因为我刚刚接触过多线程软件和游戏背后的教程和理论.我假设如果你想从你的软件中获得最佳性能,那么当有工作要做时,你应该每个逻辑处理器至少有一个线程.由于该处理器否则将"未使用".
但是看到我已经运行了大约1000个线程,所有处理器都不会在处理某些事情吗?
为什么多线程如果处理能力已被其他50个左右的进程使用?管理所有这1000个线程不管cpu吗?为什么我作为程序员处理线程而不是操作系统?如果它给每个进程一个线程,我的软件是不是仍然是"multhithreaded"?
使用更多线程只是一种优先处理流程的更好的方式吗?
背景:我们是两个学生打算使用分层凝聚聚类算法撰写关于逆向工程名称空间的论文.我们有一些链接方法和其他调整到我们想要尝试的算法.我们将在流行的GitHub存储库上运行该算法,并将创建的集群与最初存在的名称空间进行比较.我们的工作将密切关注的作品这个文件.在论文中,作者提到使用"精确度回忆度量"来测量聚类算法的准确性.然而,更密切地关注度量及其来源,它似乎专注于扁平(非分层)集群.
问题: 有没有办法使用精确回忆度量来衡量恢复群集层次结构的准确性?如果没有,还有哪些其他选择?
所以基本上我有这个软件以列表形式输出数据.感谢这里的评论我们已经明白它最有可能用.NET编写.
我想扫描列表,以便我可以对数据做一些算法.
使用Spy ++我发现保存此列表的内容名为"Panel2",我可以使用EnumChildWindows获取此句柄(其类为"WindowsForms10.Window.8.app").
但是,我不知道如何到达列表本身,所以我可以阅读其项目.我已经在"Panel2"手柄上尝试了EnumChildWindows并输出了所有这些窗口的标题,但它们都是空的.
panel2可以作为实际列表吗?如果是这样我可以把它投入(CListCtrl*)?
Axilles在评论中提到它可能是用.NET编写的,可以使用像http://reflector.red-gate.com/download.aspx?TreatAsUpdate=1这样的东西来获取列表的controlID /句柄.
CWnd* mainWindow;
CWnd* panel;
CListCtrl* list;
BOOL CALLBACK findWindow( HWND hwnd,LPARAM lParam)
{
char text[8];
GetWindowText(hwnd,text,8);
if(strcmp(text,"Fetcher") == 0)
{
mainWindow= CWnd::FromHandle(hwnd);
return false;
}
return true;
}
BOOL CALLBACK findPanel(HWND hwnd,LPARAM lParam)
{
char text[7];
GetWindowText(hwnd,text,7);
if(strcmp(text,"Panel2") == 0)
{
panel = CWnd::FromHandle(hwnd);
return false;
}
return true;
}
void CAnalyzeDlg::OnBnClickedButton1()
{
mainWindow = 0;
while(mainWindow == 0)
{
::EnumWindows(findWindow,0);
}
mainWindow ->ActivateTopParent();
while(panel == 0) ::EnumChildWindows(mainWindow ->m_hWnd,findPanel,0);
CWnd* …Run Code Online (Sandbox Code Playgroud) Visual Studio附带的C++标准库实现和Windows API(包括Win32和MFC)都包含大量宏.
例如,他们将"TRUE"和"FALSE"定义为1和0.并将所有上下文中的bool替换为"BOOL",它是int的typedef.他们甚至没有使用三向逻辑.
还有"min"和"max"宏,可以很容易地用模板替换.
还有大量的定义只是简单地定义为"远"和"近"等.
我有一棵树,每个节点基本上看起来像这样:
struct node
{
std::unordered_set<object*> objects;
std::map<std::type_index,node> children;
};
Run Code Online (Sandbox Code Playgroud)
当我遍历树以添加新类型时,我想要检查:
std::is_base_of<base,derived>
Run Code Online (Sandbox Code Playgroud)
但是,我对派生类型的唯一信息是a type_index/type_info*.
无论如何,我可以转变type_info*成一个template论点吗?
如果没有,我的其他选择是什么?我想可以调用decltype(*objects.begin()),但这需要每个节点中的每个集合永远不会为空.
Windows Vista发布后,Windows功能蜂鸣声会在连接的扬声器上发出蜂鸣声而不是内部扬声器.
反正有没有访问旧功能?是否有可能通过在旧的Windows API中保留?或者还有其他方法可以实现这一目标吗?如果是这样,我希望能够同时设置频率和持续时间.
我应该提一下,我实际上是针对windows xp平台.
该库提供了一个派生类,派生类作为模板参数.
例:
class userclass : public lib::superclass<userclass>
{}
Run Code Online (Sandbox Code Playgroud)
你可以看到很多东西要打字.并且"userclass"应该始终公开,以使其正常工作.所以我提出了两个看起来像这样的MACRO:
#define SUPER(x) public lib::superclass<x>
#define SUPERCLASS(x) class x : public lib::superclass<x>
Run Code Online (Sandbox Code Playgroud)
用户现在可以键入任何一个.
class userclass : SUPER(userclass)
{}
SUPERCLASS(userclass)
{}
Run Code Online (Sandbox Code Playgroud)
但主要问题是,MACER SUPER和SUPERCLASS存在于用户全局命名空间中,与包含的标题一样快.
可以/我应该:
我正在使用vs 11,该库是针对Windows开发人员的.