其中一些预处理器定义位于WinMain函数和其他Windows库函数中.他们的目的是什么?他们是如何工作的?将它们写入您的实现或函数调用是一种好习惯吗?
我最初的研究表明,他们只是设置为:
#define __in
#define __out
#define __in_opt
Run Code Online (Sandbox Code Playgroud)
意味着它们在预处理器传递中没有被替换.它们只是一种文档方法,没有任何功能吗?
如果是这样,我可以看到像这样记录代码的优势.像doxygen这样的东西你需要写出两次参数名称.因此,理论上这有助于减少重复,并保持一致性......
我没有关于如何__allowed()运作的理论.
这是我到目前为止所做的:
我安装了Homebrew:
/usr/bin/ruby -e "$(/usr/bin/curl -fsSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"
Run Code Online (Sandbox Code Playgroud)
然后是python: brew install python
然后py2cairo: brew install py2cairo
这两个似乎都正确安装,当我输入which python我得到:usr/local/bin/python我认为是自制的版本.
我已经编辑了我的路径,正如许多Homebrew指南所建议的那样:
export PATH=/usr/local/bin:/usr/local/share/python:$PATH
Run Code Online (Sandbox Code Playgroud)
这是我得到的echo $PATH:/usr/local/bin:/usr/local/share/python:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
我也可以输入python --version并获得python 2.7.3哪些似乎正确,因为如果我查看/usr/local/Cellar/py2cairo/1.10.0/README它说:
Dependencies
------------
cairo >= 1.10.0
Python >= 2.6
Run Code Online (Sandbox Code Playgroud)
然而,毕竟这仍然无法将py2cairo库导入python.这是我尝试时得到的:
Sal:~ Lockyer$ python
Python 2.7.3 (default, May 6 2012, 13:47:31)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> …Run Code Online (Sandbox Code Playgroud) 我正在尝试放置一个JList内部JScrollPane并按字母顺序列出垂直列中的条目,如下所示:
A D G
B E H
C F
Run Code Online (Sandbox Code Playgroud)
但是当JList空间用完以显示更多条目时,我希望仅在垂直方向JScrollPane上滚动.
这在我使用时有效VERTICAL_WRAP.然而,似乎当我使用垂直包装时,我得到一个水平滚动条,当我使用时,HORIZONTAL_WRAP我得到我想要的滚动条,但是项目按照我不喜欢的顺序放置.我可以吃蛋糕吗?这是我正在尝试做的一个简单的例子.
这是我能得到的最接近的,但我希望能够在保持垂直字母顺序的同时垂直滚动.
public class ScrollListExample {
static List<String> stringList = new ArrayList<String>();
static {
for (int i = 0; i < 500; i++) {
stringList.add("test" + i);
}
}
public static void main(final String[] args) {
final JFrame frame = new JFrame();
final Container contentPane = frame.getContentPane();
final JList list = new JList(stringList.toArray());
list.setLayoutOrientation(JList.VERTICAL_WRAP);
list.setVisibleRowCount(0);
final …Run Code Online (Sandbox Code Playgroud) api特定typedef的目的是什么,例如GLsizei GLint GLvoid?
我在c和c ++代码中到处都看到了这一点.基本类型通常使用库前缀/后缀来表示.这背后的原因是什么?这是好习惯吗?我的程序应该自己做类似的事吗?
乍一看似乎使代码的可读性稍差.您必须立即将GLint转换为int,这就是一个简单的例子.
像UINT之类的东西对我来说更多,至少这会将unsigned int缩短为四个字母.
该选项打包JNLP作为一个应用程序不会出现在甲骨文的JDK 7 Java首页存在,因为它在苹果所做的陈述在这里
OS X桌面与Java Web Start的集成允许用户从任何Java Web Start应用程序创建本地应用程序包.Java Preferences中的Shortcut Creation设置控制在打开Java Web Start应用程序时是否提示用户创建应用程序包.捆绑的Java Web Start应用程序具有本机应用程序包的所有优点,在"OS X应用程序包"中对此进行了描述.
为了解决这个问题,我使用Automator创建一个.app,它运行一个执行JNLP的shell脚本.这允许我使用应用程序图标,但我所有配置停靠图标的尝试都失败了.
我尝试使用iconutil并添加到该Resources文件夹创建.icns文件,然后Contents/Info.plist在该字段下指定.icns文件,"Icon File"但在运行应用程序时我仍然在Dock中获得java咖啡杯图标.
我尝试过的另一件事是将-Xdock:icon=icon.jpg参数传递给javaws但是这看起来只适用于常规的java程序.
假设一个单线程应用程序。如果您调用ExecuteCommandLists两次(A和B)。在启动B的任何命令之前, A是否能保证在 GPU 上执行其所有命令?我在文档中可以找到的最接近的内容是这个,但它似乎并不能真正保证A在B开始之前完成:
应用程序可以从多个线程向任何命令队列提交命令列表。运行时将执行按提交顺序序列化这些请求的工作。
作为比较,我知道Vulkan 中显然无法保证这一点:
vkQueueSubmit 是一个队列提交命令,每个批次由 pSubmits 的一个元素定义为 VkSubmitInfo 结构的实例。批次按照它们在 pSubmits 中出现的顺序开始执行,但可能会乱序完成。
不过,我不确定 DX12 是否也能以同样的方式工作。
弗兰克卢纳的书说:
命令列表从第一个数组元素开始按顺序执行
然而,在这种情况下,他谈论的是使用ExecuteCommandLists两个命令列表(C和D)调用一次。这些操作与两个单独的呼叫相同吗?我的同事认为这仍然只能保证它们按顺序启动,而不能保证C在D开始之前完成。
我缺少的地方有更清晰的文档吗?
我有一个外部库需要与我的java项目中的测试动态链接.该项目是使用maven设置的,我需要在eclipse中将以下内容添加到我的vm参数中,以便传递测试:
-Djava.library.path=${env_var:HOME}/.m2/repository/natives/dist/lib -ea
不幸的是,这意味着使用:从maven运行测试mvn test将始终失败.
一个解决方法是mvn使用这样的-DargLine参数调用:
mvn test -DargLine="-Djava.library.path=/Users/rob/.m2/repository/natives/dist/lib -ea"
但是,显然这有我的机器特有的问题,所以我不能直接把它放在pom文件中.我想我正在寻找的是一种在每台机器上修改该字符串的方式,就像第一行用于eclipse.
我也很好奇我怎么能把它放到POM文件中,我已经尝试将它放在<argLine>标签内,但这似乎不起作用,是否有一些我缺少的东西:
<argLine>-Djava.library.path=/Users/rob/.m2/repository/natives/dist/lib -ea</argLine>
我试图了解 x86-64 机器上 C++ 的一致性保证,以及在其他平台上是否有所不同。具体来说,我想知道是否可以保证如果一个线程在下一个线程读取变量之前写入变量,我是否总是会看到正确的值?我读过一些关于此的相互矛盾的信息。
\n\n这是一个示例,其中Shared在另一个线程中更新,并且仅当我们确定值已完成更新时才读取结果。这总是打印 1 吗?我每次测试的时候都是如此,但我无法通过例子来证明这一点。
#include <iostream>\n#include <thread>\n#include <atomic>\n\nstd::atomic<bool> Done {false};\nint Shared = 0;\n\nint main(int argc, const char* argv[])\n{\n auto Thread = std::thread([](){\n Shared = 1;\n Done = true;\n });\n\n while(!Done)\n {\n }\n\n std::cout << Shared << std::endl;\n\n Thread.join();\n return 0;\n}\n\nRun Code Online (Sandbox Code Playgroud)\n\n该博客似乎建议在 x86-64 上所有写入对其他线程可见:http://benbowen.blog/post/cmmics_iii/
\n\n这份文件听起来也有类似的内容:
\n\n\n\n\n当线程写入共享内存位置时,MESIF 协议要求该内存位置的所有其他副本均无效。如果发生这种情况,处理器中的所有内核都会向 LLC(在本例中为 L3\xc2\xadcache)发送一个 RFO\xc2\xadrequest(读取\xc2\xadfor\xc2\xadownership 请求),以检查 snoop \xc2\xadfilter,然后将失效发送到所有保存缓存行副本的缓存\xe2\x80\x99。
\n
https://www.eit.lth.se/fileadmin/eit/courses/edt621/Rapporter/2015/robin.skafte.pdf
\n我试图在标题Release-Acquire ordering https://en.cppreference.com/w/cpp/atomic/memory_order标题下理解这些部分
他们说关于原子负载和存储:
如果线程A中的原子存储被标记为memory_order_release,并且线程B中来自同一变量的原子加载被标记为memory_order_acquire,则从线程的角度来看,发生在原子存储之前的所有内存写入(非原子和宽松原子) A在线程B中成为可见的副作用。也就是说,一旦原子加载完成,线程B就可以保证看到线程A写入内存的所有内容。
然后关于互斥锁:
互斥锁,例如std :: mutex或原子自旋锁,是释放获取同步的一个示例:当锁由线程A释放并由线程B获取时,在临界区中发生的所有事情(释放之前)在执行相同关键部分的线程B(在获取之后)必须对线程A上下文可见。
第一款似乎是说,一个原子负载和存储(含memory_order_release,memory_order_acquire)线程B保证看到的一切线程A写道。包括非原子写入。
第二段似乎暗示了互斥锁的工作方式相同,只是 B可见的范围仅限于关键部分中包装的内容,这是否是正确的解释?还是每次写,甚至关键部分之前的内容都对B可见?
我有两个显示器,每个显示器连接到不同的 GPU。两个 GPU 都在一台机器中,我想运行一个应用程序。我有两个独立的视图,我想使用 GPU/监视器集渲染每个视图。我可以创建多个表面和设备,但我想确保将每个表面与其监视器所插入的 GPU 相关联,否则我怀疑我会遇到性能问题,因为帧缓冲区需要在卡之间来回复制。
我正在使用全屏表面,我想这vkGetPhysicalDeviceSurfaceSupportKHR会告诉我一些事情。然而,两者VkSurfaceKHR似乎都是有效的目标VkPhysicalDevice,所以我猜这是操作系统和 GPU 驱动程序可以处理的事情,但是是否有任何关于哪个表面最适合与设备关联的提示?
据我所知,该扩展VK_KHR_display是执行此操作的一种方法,但它在我的 Windows 10 计算机或 Nvidia GPU 上不可用。它似乎仅适用于嵌入式平台。但是,它可以让您列出每个设备的附加显示器,这正是我正在寻找的: https: //vulkan.lunarg.com/doc/view/1.0.30.0/linux/vkspec.chunked/ch29s03.html
文档中的这段引用让我相信 Windows 可能不支持这一点:
问题
1)Win32是否需要一种方法来查询特定物理设备和特定屏幕之间的兼容性?物理设备和窗口之间的兼容性通常仅取决于窗口所在的屏幕。然而,在屏幕上尚未有窗口的情况下,没有一种明显的方法来识别屏幕。
已解决:不。虽然它可能很有用,但在 Win32 上没有明确的方法来执行此操作。但是,添加了一种方法来查询对呈现到整个 Windows 桌面的支持。
不过,我仍然有兴趣了解是否有解决办法可以实现类似的效果。
由于某些原因,当我调用glfwWindowHint()时:
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
Run Code Online (Sandbox Code Playgroud)
然后致电至:
glewInit()
Run Code Online (Sandbox Code Playgroud)
我最终遇到glError:GL_INVALID_ENUM。当我遗漏所有的glfwWindowHint()调用时,一切正常,并且没有设置glError。我使用这些库的方式有误吗?或者这是glfw中的错误,还是有问题?
请注意,我正在使用glew-1.10.0和glfw-3.0.3
这是一个简单的程序来说明我遇到的问题:
#include <iostream>
#include "GL/glew.h"
#include "GLFW/glfw3.h"
int main(char* argc, char* argv[])
{
GLFWwindow* window;
if (!glfwInit())
{
return -1;
}
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
window = glfwCreateWindow(800, 600, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
//glewExperimental = GL_TRUE; tried commenting this out but I still get the error
if(glewInit() != GLEW_OK)
{
return -1;
}
switch(glGetError())
{
case GL_INVALID_ENUM:
std::cout << …Run Code Online (Sandbox Code Playgroud) 我输入:
echo $USERPROFILE 并得到 C:\Users\rob
echo $PROGRAMFILES 并得到 C:\Program Files (x86)
echo $PROGRAMDATA 一无所获。
在Windows下%PROGRAMDATA%评估为C:\ProgramData
为什么支持某些Windows环境变量而不支持其他环境变量,或者我在这里做错了什么?如果不是,在cygwin下转换了哪些列表以供使用?