小编Han*_*ant的帖子

我的生产者 - 消费者队列设计有什么问题?

我开始用C#代码示例在这里.我试图调整它有几个原因:1)在我的场景中,所有任务将在消费者开始之前预先放入队列中; 2)我想将工作者抽象为一个单独的类而不是班上的原始Thread成员WorkerQueue.

我的队列似乎并没有自行处理,它只是挂起,当我在Visual Studio中打破时,它就停留在#1 _th.Join()线上WorkerThread.另外,有更好的方法来组织这个吗?暴露WaitOne()Join()方法的东西似乎是错误的,但我想不出一个让WorkerThread队列进行交互的合适方法.

另外,如果我q.Start(#)using块的顶部调用,则每次启动时只有一些线程(例如,线程1,2和8处理每个任务).为什么是这样?这是某种竞争条件,还是我做错了什么?

using System;
using System.Collections.Generic;
using System.Text;
using System.Messaging;
using System.Threading;
using System.Linq;

namespace QueueTest
{
    class Program
    {
        static void Main(string[] args)
        {
            using (WorkQueue q = new WorkQueue())
            {
                q.Finished += new Action(delegate { Console.WriteLine("All jobs finished"); });

                Random r = new Random();
                foreach (int i in Enumerable.Range(1, 10))
                    q.Enqueue(r.Next(100, 500));

                Console.WriteLine("All jobs queued"); …
Run Code Online (Sandbox Code Playgroud)

c# queue multithreading producer-consumer

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

形状不规则的形状

许多现代应用具有不规则形状.在Delphi中执行此操作的最佳方法是什么?是否可以在不使用任何第三方VCL的情况下执行此操作?

delphi

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

更改Caret颜色或隐藏它VB.NET

我在VB.NET中制作一个程序,需要在文本框中隐藏Caret.

我可以忍受它完全隐藏或与文本框背景颜色相同的颜色.我该怎么做呢?如果可能的话,我宁愿远离自定义控件.

谢谢

vb.net textbox winforms

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

对于浮点数和双数,为什么负数和正数不对称?

读取MSDN,浮点范围从1E-45到1E38,双倍范围从1E-324到1E308,我想知道为什么它对于负指针和正指数是不对称的?

.net c#

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

UserPrincipal.Save()导致ObjectDisposedException

请考虑我拥有的Active Directory服务中的以下代码段.在该Rename()方法中,它始终抛出ObjectDisposedException" 无法访问已处置的对象.对象名称:'DirectoryEntry'. "

这曾经工作得很好,但我也有一个Add()方法,两个是95%完全相同的代码.所以,我选择了SetIdentity()传递主体和属性字典的方法并从那里开始.该Add()方法有效,但那是因为还没有底层对象可以操作.该Rename()方法失败,因为有一个.

我知道,如果我把代码放SetIdentity()回去,Rename()它会工作得很好,但我不想这样做.

我已经尝试在一个块中包装该using子句,但它没有做任何事情.我试过传递校长和字典,但这也没有帮助.我已经尝试检查是否为null并且它没有帮助.Rename()try/catchrefDirectoryEntry

所以,我猜它不能是using条款中的代码失败.我还应该寻找什么?

使用Visual Studio进行调试时,我可以将鼠标悬停在对象上,它就在那里并完成属性和值,所以我不知道我应该在哪里寻找......

public override void Rename(
    UserPrincipal principal,
    IDictionary<string, object> properties) {
    if (principal != null) {
        this.SetIdentity(ref principal, ref properties);

        using (DirectoryEntry entry = (principal.GetUnderlyingObject() as DirectoryEntry)) {
            entry.Rename(newName: String.Format("CN={0}", principal.DisplayName));
            entry.CommitChanges();
        };

        principal.Save(); // this is where ASP.NET runtime points to when failed
    };
} // …
Run Code Online (Sandbox Code Playgroud)

.net c# active-directory

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

C#中的Tabcontrol页面清除所有控件

我有一个标签页,其中包含文本框,下拉菜单,复选框,以上所有组框和一些标签.现在我想在用户点击按钮时清除所有控件.我该如何实施呢?我搜索了很多,以为会有一个标准的库方法.我找到的只是一些for-each循环的方法(在组合框中不起作用.)请指导我如何处理这个问题.基本上我想要像Tabpage.load(); 它使标签处于初始状态.如果可能,我想保留特定的文本框.

.net c# winforms

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

Windows 7存储消息框的图标在哪里[.DLL]

有谁知道存储来自Windows的MessageBox符号的位置(错误图标,感叹号图标......).我认为他们在.dll文件中!

c# windows

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

如何在C#代码中使用c/c ++结构?

我正在使用一些使用UDP向我发送字节数组的服务.这个服务应用程序是用C语言开发的 - 这个字节数组是一个C结构.

我知道我可以在C#上重新定义这个结构,并使用StructLayout属性使成员具有相同的对齐方式(我是对的吗?)

但是可以使用托管C++/CLI定义相同的结构并将此托管C++代码导入到我的C#项目中并以此方式进行序列化吗?

如果这是可能的 - 那该怎么做?当我谷歌它时,我找不到任何例子.

c# c++-cli

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

pin_ptr无法在非托管类中声明托管对象

我有非托管课程.在那个类中,我有一个托管对象.现在我想在我的unmanged类中为托管对象创建一个pin_ptr.当我尝试这样做时,我收到此错误"错误C3265:无法pinnedProject在非托管中声明托管_ ProjectWrapper如何实现此目的?

这是代码.

class ProjectWrapper
{
private:
    msclr::auto_gcroot<Project^> _project; // --> This works fine,
    pin_ptr<msclr::auto_gcroot<Project^>> _pinnedProject; // ---> This gives error
public:
    ProjectWrapper()
    {
        _project = gcnew Project();
        pin_ptr<msclr::auto_gcroot<Project^>> anotherPinnedProject = &_project; // --> This one works,
        //_pinnedProject = _project; // --> I want to use this instead of above live,
    }
}
Run Code Online (Sandbox Code Playgroud)

c# interop c++-cli

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

BITWISE AND操作如何在C程序中占用比ARITHMETIC ADDITION操作更多的CPU时钟?

我想测试按位运算是否真的比算术运算更快.我以为他们是.

我写了一个小的C程序来测试这个假设,令我惊讶的是,加法平均比按位AND运算少.这对我来说是令人惊讶的,我无法理解为什么会这样.

根据我所知的附加,来自较低有效位的进位应该被携带到下一位,因为结果也取决于进位.对我来说逻辑运算符比加法更慢是没有意义的.

我的鳕鱼在下面:

#include<stdio.h>
#include<time.h>

int main() 
{
   int x=10;
   int y=25;
   int z=x+y;
   printf("Sum of x+y = %i", z);
   time_t start = clock();
   for(int i=0;i<100000;i++)z=x+y;
   time_t stop = clock();

   printf("\n\nArithmetic instructions take: %d",stop-start);
   start = clock();
   for(int i=0;i<100000;i++)z=x&y;
   stop = clock();

   printf("\n\nLogic instructions take: %d",stop-start);
}
Run Code Online (Sandbox Code Playgroud)

一些结果:

Arithmetic instructions take: 327
Logic instructions take: 360

Arithmetic instructions take: 271
Logic instructions take: 271

Arithmetic instructions take: 287
Logic instructions take: 294

Arithmetic instructions take: 279
Logic instructions take: …
Run Code Online (Sandbox Code Playgroud)

c assembly instructions logical-operators integer-arithmetic

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