小编Chr*_*ris的帖子

从主线程休眠是抛出InterruptedException

我有执行的主线程产生新线程.在main()执行的主线程中,我正在调用Thread.sleep().我什么时候得到未处理的异常类型InterruptedException

我不确定为什么我会这样做.我认为这是因为我需要一个对主线程的引用所以我继续前进并通过它引用它Thread.currentThread().

这不是让线程睡觉的方法吗?我需要做的是让主线程等待/睡眠/延迟,直到它再次需要工作.

java multithreading

9
推荐指数
1
解决办法
3万
查看次数

使用两种不同的CGI.pm编程风格和Perl有什么优缺点?

我在学校的Web脚本课上,正在完成我的第一个任务.我倾向于过度开展事情并深入研究我的课程,而不是课程所要求的.现在我正在研究CGI.pm来做我的HTTP请求,它说CGI.pm有两种编程风格:

  • 面向对象的风格
  • 一种功能导向的风格

除非我忽略了明确的答案,或者我没有足够的知识从我在http://perldoc.perl.org/CGI.html提供的文档中辨别出自己的答案.我只是不知道使用的利弊是什么这两种风格不同.

有了这个说,使用这两种不同风格的利弊是什么?哪一个更常用?至于使用面向对象的样式,它说我当时只能使用一个CGI对象.这是为什么?

感谢你的帮助.你们都为我学习计算机科学非常愉快,满意和有益.= d

perl cgi

7
推荐指数
1
解决办法
357
查看次数

如何从鼠标手势生成的点列表中确定所有线段?

目前我正在一家软件公司实习,我的任务之一就是实现鼠标手势的识别.其中一位资深开发人员帮助我开始使用$ 1 Unistroke Recognizer http://depts.washington.edu/aimgroup/proj/dollar/提供代码/项目.从广义上讲,我得到了1美元Unistroke识别器正在做什么以及它是如何工作的,但是我试图理解它的所有内部/更精细的细节有点不知所措.

我的问题是我正在尝试识别将鼠标向下移动然后向上移动的姿势.$ 1 Unistroke识别器确定我创建的手势是一个向下的手势,这实际上是它应该做的.我真正想要它做的是说"我认识到一种沮丧的手势,然后是一种向上的手势."

我不知道对$ 1 Unistroke Recognizer缺乏了解是否完全让我头疼,但是有没有人有任何关于如何识别两个不同的手势,从向下移动鼠标然后向上移动的想法?

这是我的想法,我认为可能会帮助我,但我会喜欢那些专家,甚至比我更了解我,让我知道你的想法.任何帮助或资源,你知道将被大大赞赏.

我的应用目前如何工作:

我当前的应用程序的工作方式是,当用户按住鼠标左键时,我从鼠标光标所在的位置捕获点.然后,点列表被馈送到手势识别器,然后它会吐出它认为是对应于捕获点的最佳形状/手势.

我的想法:

我想要做的是在我将点数提供给手势识别器之前,以某种方式通过所有点并将它们分解成单独的线条或曲线.这样我可以一次一个地提供每条线/曲线,并且从向下,向上,向左,向右,对角线和曲线的基本运动中我可以确定最终的形状/姿势.

我认为在我的点列表中是否有单独的线条的一种方法是对点组进行采样并查看它们的斜率.如果采样点组的斜率与其他一组采样点的X%不同,则可以安全地假设确实存在单独的线.

我认为是我思考中可能存在的问题:

  • 我在哪里确定一条线的终点和一条单独线的开头?如果我要使用检查一组点的斜率的想法然后确定存在单独的线并不意味着我已经发现了单独线的斜率.例如,如果您要绘制一个直角的直边"L"并采样"L"角落周围的点的斜率,您会看到斜率会给出合理的指示,表明存在单独的线但是这些点与单独一行的开头不对应.

  • 如何处理曲线不断变化的斜率?我使用的手势识别器已经按照我想要的方式处理曲线.但是我不希望我用来确定单独行的方法继续在曲线中寻找这些所谓的单独行,因为当我对点组进行采样时,它的斜率一直在变化.一旦斜率连续多次变化超过X%,我会停止采样点吗?

  • 我没有使用正确的"类型"数学来确定单独的行.数学不是我最强的科目,但我做了一些研究.我试着调查Dot Products,看看是否会指向某个方向,但我不知道是否会.有没有人使用Dot Prodcuts做这样的事情或其他方法?

最后的想法,备注和谢谢:

我觉得我的问题的一部分是我不知道如何完全问我的问题.如果已经问过(以这种或那种方式)这个问题并且存在可以用谷歌搜索的解决方案,我不会感到惊讶.但是我在Google上的搜索结果没有提供任何解决方案,因为我还不确切知道如何提出我的问题.如果你觉得这很令人困惑,请告诉我在哪里和为什么,我会帮助澄清它.这样做也许我在Google上的搜索会变得更精确,我将能够找到解决方案.

我只是想再次感谢阅读我的帖子.我知道它很久但不知道在哪里可以问它.Imma与办公室周围的其他人交谈,但我在学校使用的所有最佳解决方案都来自StackOverflow社区,所以我非常感谢你.

编辑到这篇文章:

(7/6 4:00 PM)我想到的另一个想法是在Min/Max点之前比较所有点.例如,如果我将鼠标向下移动然后向上移动,我的起点将是当前的最大点,而我开始向上移动鼠标的点将是我的最小点.然后我可以继续前进,看看在最小点之后是否有任何点,如果是这样,可能会有新的潜在线.我不知道这对于像星星这样的其他形状有多好,但这是我要研究的另一件事.以前有人做过类似的事吗?

math drawing gesture-recognition gesture

7
推荐指数
1
解决办法
849
查看次数

如何在所谓的事件中找到引发事件的控件?Visual C#

我正在编写一个C#程序,它接受一堆参数并对数据点进行一些转换,然后将它们绘制到屏幕上.

在我的一个表单上,我有一堆TextBoxes,我都希望执行相同的KeyPress事件.之前我会做一个switch语句,它只会接收KeyPress事件的发送者并将其与所有TextBox进行比较.这种方法对我来说似乎不太高效,因为现在我有20多个TextBox.

我想要做的是找到表单上的哪个TextBox发送了KeyPress事件,并从该TextBox获取更多信息(IE的Text值等).这样可以省去我不得不与发送者进行大量切换以查看TextBox相同的问题.但我刚刚度过了最艰难的时光.

我查看了System.Windows.Controls和System.Windows.Forms类,看看是否能找到对我有用的东西.我正在寻找的东西可以让我看到哪个控件有焦点.也许这就是我应该寻找的东西?我还看了一下我在KeyPress事件中可以对发件人做些什么来看看我是否能弄清楚TextBox引发了什么并且仍然没有运气.

在这一点上,我觉得我更加困惑自己.任何帮助将非常感激.

c# winforms

5
推荐指数
2
解决办法
3333
查看次数

绘制三角形条时,什么控制OpenGL的行为?

所以我知道如何使用绘制多个三角形glBegin(GL_TRIANGLE_STRIPS).我想要了解的是OpenGL如何决定将哪个顶点(前三个提供的顶点)用作要绘制的所有剩余三角形的起始顶点?有没有办法让它选择一个不同的起始顶点?

opengl geometry

3
推荐指数
1
解决办法
800
查看次数

尝试使指针为NULL时,赋值错误中的左值无效

我有一个结构类型的指针,我做了.在程序启动它开始为NULL然后我malloc/realloc因为我需要添加/删除这些结构我只是用我的指针指向第一个结构并像数组一样穿过它.

当我malloc/realloc时,我总是使内存中"数组"/区域的大小比它需要的大.我这样做,所以我可以将内存中的"最后一个索引"/区域设置为NULL,所以我可以说像while(指针!= NULL).

我得到错误:当我尝试将NULL分配给内存数组/内存区域中的最后一个位置时,赋值无效:

  // Realloc remotelist by adding one to connrhosts
  connrhosts++;
  remotelist = realloc(remotelist, sizeof(rhost)*(connrhosts + 1));
  (remotelist + connrhosts) = NULL;
Run Code Online (Sandbox Code Playgroud)

我想我说的是:

  • 是时候向我的阵列添加一个新结构了,所以我会将connrhosts增加一个.
  • 将指向remotelist的内存重新分配到一个新的内存区域,该区域是connrhosts的大小(我将使用多少个结构)以及一个额外的空间,因此我可以将其设为NULL
  • 将remotelist指向新的记忆区域
  • 使用我的指针remotelist并添加偏移connrhosts,它现在将指向内存区域的最后一个索引并使该指针为NULL.

据我所知(或感觉)我做的一切都是正确的,但我现在已经在这个项目上工作了一段时间,而且我的印象是我有隧道视野.我希望有一双新鲜的眼睛看看我的逻辑/代码,让我知道他们的想法和我做错了什么.再次感谢.:d

编辑 - 我的一部分问题是我认为我对使用指针做什么有误解.

这是我的结构:

typedef struct {
  char address[128]; // Buffer that holds our address of the remote host
  int port; // Port of the remote host
  int conn; // FD to the connection of our remote host
  int ofiles; // Open files associated with the remote host
} rhost; …
Run Code Online (Sandbox Code Playgroud)

c compiler-construction pointers compiler-errors

3
推荐指数
1
解决办法
5267
查看次数

是否可以在foreach循环中递增标识符而不评估其表达式?

我有一组对象,我想迭代,最终识别某种类型的模式.目前我有一堆if语句检查表达式的标志.例如,我有if(!foundFirstObjectOfTypeA)的内容.一旦我发现AI类型的第一个对象将标志设置为true,我们将不再执行该块并继续前进到下一个块.我有几种类型的模式可以识别,因此它创建了一大块难以理解和丑陋的if语句.

有没有办法在不评估foreach循环中的表达式的情况下查看/查看标识符?如果我可以按照if(identifer == ObjectA && identifer.next == ObjectB)的方式做一些事情,那么它将使我的代码更具可读性和可理解性,而且我可以在不必设置标志的情况下进行处理.

如果没有直接的方法/方式,有人有一些聪明的变通方法来模拟我想要的效果吗?

c#

3
推荐指数
1
解决办法
3255
查看次数

当它不应该时,函数突然返回

我正在为我的一个暑期班做一个操作系统任务.教师提供了一个目标文件,该文件提供模仿磁盘设备驱动程序行为的功能.然后我们编写一个使用C中的磁盘设备驱动程序的文件系统API.

我正在处理名为Format()的文件系统格式函数,该函数从教师对象文件中调用名为DevFormat()的函数.如果能够成功格式化文件系统,我的函数应返回1,否则返回0.如果DevFormat()能够成功格式化磁盘驱动器,则返回1,否则返回0.这是代码:

int Format()
{
    if (!DevFormat())
    {
        printf("Disk drive wasn't formatted successfully\n");
        return 0;
    }

    <Do some stuff to the file system here>

    printf("File system successfully formatted\n");
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是Format()突然结束而没有返回值.我发现有问题的代码是行:if (!DevFormat()).现在我正在用C编写作业,但我正在使用GNU C++(g ++)编译器来编译和链接我的项目,就像老师说的那样.我想说,当if (!DevFormat())执行该行时,Format()突然结束的原因必须与编译器对我的代码的解释做一些事情(我可能会离开.它只是一个猜测.).我发现如果我将代码更改为,我的函数也会突然结束if (0 == DevFormat()).我可以测试失败的唯一方法是将DevFormat()的返回值赋给int变量,然后检查它.

任何帮助将非常感激.这与C++编译器解释我的代码的方式有关吗?难道我错过了一些平凡的东西,以至于我应该为自己感到羞耻吗?

再次感谢您的帮助.

c c++ debugging gdb

3
推荐指数
1
解决办法
285
查看次数

使用预处理程序指令从数学方程生成的值错误

我有这个预处理器指令:

#define INDEXES_PER_SECTOR BYTES_PER_SECTOR / 4
Run Code Online (Sandbox Code Playgroud)

其中BYTES_PER_SECTOR在另一个头文件中声明为:

#define BYTES_PER_SECTOR    64
Run Code Online (Sandbox Code Playgroud)

我有这个简单的数学方程式,我写的在执行后我得到一个断言错误,因为分配给iTotalSingleIndexes的值不正确.

int iTotalSingleIndexes = (iDataBlocks - 29) / INDEXES_PER_SECTOR;
Run Code Online (Sandbox Code Playgroud)

现在我认为这是因为预处理器指令INDEXES_PER_SECTOR.在执行我的等式时,iDataBlocks是285,这是正确的.我用gdb证实了这一点.问题是,当它应该是16时,分配给iTotalSingleIndexes的值是1.我真的不知道为什么会发生这种情况.

当我做的事情:

int iIndexesInASector = INDEXES_PER_SECTOR;
int iTotalSingleIndexes = (iDataBlocks - 29) / iIndexesInASector;
Run Code Online (Sandbox Code Playgroud)

将正确的值分配给iTotalSingleIndexes.

在其他注释中,我在其他方程式中使用预处理器指令,它们工作正常,所以我更加困惑.

任何帮助将非常感激.

c c++

3
推荐指数
2
解决办法
377
查看次数

使用 C# 连接/重试连接的最有效方法?

我正在创建一个小游戏客户端,它将最终连接到服务器以收集有关可用游戏的一些信息,有多少玩家正在玩,以及您可以想象它应该做的各种其他事情。

我的困难在于找到一种有效的方法来处理首次加载时的连接/重试连接序列。

我想象我的客户在尝试连接时会遵循这个过程:

  1. 客户端应用程序执行
  2. 尝试建立连接
  3. 如果连接成功收集信息 - 如果不成功继续第 4 步
  4. 显示一个新的对话框/表单,提示用户正在尝试建立连接
  5. 循环直到建立连接

我一直在质疑我试图遵循这个顺序的方法。我质疑这是否是正确/最有效的连接方式以及为什么我在步骤 4 中显示的表单不起作用?

try
{
    sock.Connect(authenServerEP);
    // Once connected show our main client window
    this.Show();
    // Create the LoginForm once a connection has been established and display
    LoginForm loginForm = new LoginForm();
    loginForm.ShowDialog();
    if (false == loginForm.Visible)
    {
        loginForm.Dispose();
    }
}
catch (SocketException firstConnectException)
{
    // Load retrying connection form
    EstablishingConnectionForm establishingConnectionForm = new EstablishingConnectionForm();                                
    establishingConnectionForm.Show();

    bool connected = false;
    // Loop until we are connected
    while (!connected) …
Run Code Online (Sandbox Code Playgroud)

.net c# network-programming winsock

2
推荐指数
1
解决办法
6553
查看次数