Articles of multithreading

创buildac#windows服务来轮询数据库

我想写一个服务,轮询一个数据库,并执行一个操作取决于数据被带回。 我不知道这样做的最好方法是什么,我可以find几个关于它的博客和这个堆栈溢出问题轮询服务 – C# 。 不过,我很警惕,他们都很老,可能过时了。 任何人都可以就目前的build议或最佳做法(如果有的话)就此做出build议,或者指向我最近的博客文章的方向。 从我能收集的任何一个计时器或tpl任务是这样做的两个潜在的方法。 如果定时器仍然被build议,那么当服务停止时它们将如何工作,因为我打算为这些服务执行的操作可能需要30分钟以上,这就是为什么我使用任务,因为我可以使用任务取消令牌,但是这些抛出当取消exception(如果我错了,纠正我),我不认为我真的想要这样的行为(虽然纠正我,如果你认为有一个原因,我会想这样做)。 对不起,我可能会问一个单一的问题很多,但我不完全确定我自己是什么问。

.NET中的multithreading处理

我已经有了一些想法,但是如果可能的话,我想听听大家的不同意见和select。 我有一个使用Exchange Web服务连接到Exchange并下载电子邮件的Windows控制台应用程序。 目标是采取每个单独的消息对象,提取元数据,parsing附件等。该应用程序正在检查收件箱每60秒。 连接到收件箱并获取消息对象没有问题。 这很好。 这里是我接受你的input的地方:当我收到一个消息对象时,我立即想要处理这个消息,并完成上面解释的所有繁忙的工作。 我正在考虑一些不同的方法: 将电子邮件对象排列在一个表中并逐个处理它们。 将电子邮件对象传递给本地Windows服务以完成繁忙的工作。 我不认为db排队会是一个好方法,因为有时需要处理多个电子邮件对象。 在处理具有5个附件的高优先级电子邮件之前处理具有30个附件的低优先级电子邮件是不公平的。 换句话说,电子邮件中较低的电子邮件不需要排队等待处理。 这就像在商店排队,在你前面的一个骷髅头的单一登记册扫描100件物品。 这不公平。 我的电子邮件对象的概念相同。 我对Windows服务方法有些不确定。 不过,我非常有信心,我可以安装服务监听,等待指令处理新的电子邮件。 如果我有5个独立的电子邮件对象,我可以对Windows服务进行5个独立的调用并进行处理而不发生冲突吗? 我接受build议或替代方法。 但是,解决scheme必须使用.NET技术堆栈来呈现。

从另一个线程发送winforms通知popup窗口

我在我的基本聊天程序中遇到了一个独特的小错误,它声明我不能从另一个线程发送一个Notification Popup : An exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll but was not handled in user code Additional information: Cross-thread operation not valid: Control '' accessed from a thread other than the thread it was created on. 当我调用popupNotification.Popup(); 从这个方法: void ChatServer_OnDataReceived(object sender, ReceivedArguments e) { string machine = e.Name; string message = e.ReceivedData; popupNotification.TitleText […]

在同一进程中加载​​多个dll副本

我有一个由第三方生产的DLL,它具有某种内部数据结构,将其大小限制为X个元素。 所以基本上,它有一个以X为限的队列。 现在从我所知道的DLL是每个进程,但是有可能不止一次加载一个DLL? 也许每个线程? 在C#中? 或者在C ++ / CLI中? 我试图加载一个本地的C ++ DLL。

实现IPC的方式

在Windows上实现IPC的首选方法是什么? 我知道几个像:命名pipe道,共享内存,信号灯? ,也许COM(虽然我不知道如何)… 我想知道什么被认为是最健壮,最快,最不容易出错和容易维护/理解。

有关Java线程和进程优先级的一些问题

我有一个关于线程的小问题。 在Unix系统上,我们nice ,可以用来设置优先级进程。 好的,在我的系统中,我调用了一些外部进程,但是我想为它们设置优先级。 在unix中,我可以调用其他ProcessBuilder并设置好我想要的进程,但在Windows中,这是不可能的。 如果我以某种优先级启动一个线程,并在ProcessBuilder中使用它,进程将具有与线程相同的优先级? 还是有其他的方法来做到这一点? 干杯

何时或如何删除Qt中的QThread

我从这里find了这个QThread例子。 它build议使用QObject和QThread而不是子类化QThread。 class Worker : public QObject { Q_OBJECT public slots: void doWork() { /* … */ } }; QThread *thread = new QThread; Worker *worker = new Worker; worker->moveToThread(thread); thread->start(); QMetaObject::invokeMethod(worker, "doWork", Qt::QueuedConnection); 我的第一个问题是何时以及如何删除线程? 我试图连接完成到2插槽,myTest和deleteLater。 我在myTest中设置了一个断点,这从来没有被触发。 所以我怀疑没有完成的信号,这意味着线程不会被删除。 connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); connect(thread, SIGNAL(finished()), this, SLOT(myTest())); 对于工作对象,我发出一个完成的信号作为doWork中的最后一条指令,并将其连接到一个可以删除工作对象的插槽。 这是正确的吗? Qt版本:4.6.2

OpenSSL和multithreading

我一直在阅读有关如果在multithreading应用程序中使用OpenSSL的要求,您必须使用OpenSSL注册一个线程标识函数(以及一个互斥体创build函数)。 在Linux上,根据OpenSSL提供的例子,一个线程通常是通过注册一个这样的函数来标识的: static unsigned long id_function(void){ return (unsigned long)pthread_self(); } pthread_self()返回一个pthread_t,这在Linux上可行,因为pthread_t只是一个unsigned long的typedef。 在Windows pthreads,FreeBSD和其他操作系统上,pthread_t是一个结构体,结构如下: struct { void * p; /* Pointer to actual object */ unsigned int x; /* Extra information – reuse count etc */ } 这不能简单地转换为无符号长整型,当我尝试这样做时,会抛出一个编译错误。 我尝试了void * p并将其转换为无符号长整型,理论上内存指针应该在线程间是一致且唯一的,但是这只会导致我的程序崩溃。 当使用Windows pthreads或FreeBSD或任何其他类似的操作系统时,我可以使用OpenSSL注册哪些线程识别function? 另外,还有一个问题: 有谁知道这是否也需要完成,如果OpenSSL编译进去,并与QT一起使用,如果是的话如何注册与OpenSSL的QThreads? 令人惊讶的是,我似乎无法在QT的文档中find答案。

C + + 11的std ::线程与Windows CreateThread的

哪个选项更适合在Visual C ++下创build(和pipe理)线程:C ++ 11 std::thread或者WinAPI函数(比如CreateThread , _beginthreadex等),为什么?

来自CreateWindow / CreateDialog的HWND可以从另一个线程获取消息吗?

使用Win32 API,是否可以在一个线程中创build一个窗口或对话框,然后从另一个线程收集事件? HWND是否与线程绑定? 尝试下面的人为的例子,我从来没有看到GetMessage()火。 HWND g_hWnd; DWORD WINAPI myThreadProc(LPVOID lpParam) { while(GetMessage(&msg,hWnd,0,0)> 0) { … } } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) { hWnd = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_MYDIALOG),0,myDlgProc); CreateThread(NULL,0 myThreadProc,NULL,0,NULL); … } 但在这里,我呢。 HWND g_hWnd; HINSTANCE g_hInstance; DWORD WINAPI myThreadProc(LPVOID lpParam) { hWnd = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_MYDIALOG),0,myDlgProc); while(GetMessage(&msg,hWnd,0,0)> 0) { … } } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE […]