在我的析构函数中,我想干净地破坏一个线程。 我的目标是等待一个线程完成执行,然后破坏线程。 我发现查询pthread的唯一情况是pthread_attr_setdetachstate,但是这只能告诉你,如果你的线程是: PTHREAD_CREATE_DETACHED PTHREAD_CREATE_JOINABLE 这两者与线程是否仍在运行无关。 你如何查询一个pthread,看看它是否仍在运行?
我得到一个C ++线程错误: terminate called without an active exception Aborted 这里是代码: #include <queue> #include <thread> #include <mutex> #include <condition_variable> template<typename TYPE> class blocking_stream { public: blocking_stream(size_t max_buffer_size_) : max_buffer_size(max_buffer_size_) { } //PUSH data into the buffer blocking_stream &operator<<(TYPE &other) { std::unique_lock<std::mutex> mtx_lock(mtx); while(buffer.size()>=max_buffer_size) stop_if_full.wait(mtx_lock); buffer.push(std::move(other)); mtx_lock.unlock(); stop_if_empty.notify_one(); return *this; } //POP data out of the buffer […]
今天我遇到了org.jasig.cas.client.util.CommonUtils类的方法constructServiceUrl() 。 我以为他很奇怪: final StringBuffer buffer = new StringBuffer(); synchronized (buffer) { if (!serverName.startsWith("https://") && !serverName.startsWith("http://")) { buffer.append(request.isSecure() ? "https://" : "http://"); } buffer.append(serverName); buffer.append(request.getRequestURI()); if (CommonUtils.isNotBlank(request.getQueryString())) { final int location = request.getQueryString().indexOf( artifactParameterName + "="); if (location == 0) { final String returnValue = encode ? response.encodeURL(buffer.toString()) : buffer.toString(); if (LOG.isDebugEnabled()) { LOG.debug("serviceUrl generated: […]
在multithreading服务器中使用entity framework的最佳做法是什么? 我正在使用entity frameworkObjectContext来pipe理我所有的数据库操作,现在我知道这个上下文不是线程安全的,所以现在当我需要使用它来执行一些数据库操作时,我用lock语句把它包围起来是安全的。 这是我应该怎么做?
我有一个函数, AppHelper.isOnline(Context context) ,我在我的应用程序的各个部分调用,以检查一个会话没有超时之前,提出一个HTTP请求。 public void onClick(View v) { Intent intent = null; switch (v.getId()) { case R.id.buttonPagamenti: if (AppHelper.isOnline(this)) { //here AppHelper.isOnline should have finished it's async task intent = new Intent(this, OrdineCreaActivity.class); this.startActivityForResult(intent, R.id.buttonPagamenti); } break; … 在AppHelper.isOnline()里面,我正在执行一个AsyncTasklogin,从而产生一个networking请求,这个请求不能在UI上运行,否则我会得到一个exception。 我需要等待它完成之前恢复与if内的代码。 我怎样才能做到这一点 ? 问题是活动首先启动,然后执行AsyncTask ,所以当活动期望有效的login会话时,它会中断。
我有3个问题需要帮助。 什么是正确的对象/引用作为lock语句parameter passing? 我见过很多示例代码,并且我注意到,只要访问修饰符static是非公开的,那么传入的对象/引用可能与程序中的当前类或任何其他类无关。 例如: private Object anyObj = new Object(); lock(anyObj){…..} private static readonly object Locker = new object(); lock(Locker){…..} 这对我来说没有意义。 我在MSDN中find了一个关于使用lock语句的multithreading的示例代码。 在示例中,有两个try / catch块,其中包含Monitor.Wait() 。 如果我正确理解逻辑, readerFlag将禁止该程序永远进入try / catch块。 代码是从这里的例子2: http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx 只要Windows窗体处于活动状态,如何运行在后台运行的线程? 任何人都可以帮我吗? 我已经在网上search了很多个小时,而我却无法得到我想要的答案。
我正在开发.NET中的类库 ,其他开发人员将最终使用。 这个库使用一些工作线程, 这些线程触发状态事件,这将导致一些UI控件在WinForms / WPF应用程序中被更新 。 通常,对于每次更新,您都需要检查WinForms上的.InvokeRequired属性或相应的WPF属性,并在主UI线程上调用此属性进行更新。 这可以很快变老,而且让最终开发者这样做是不对的,所以… 有什么办法,我的图书馆可以触发/调用主UI线程的事件/委托? 尤其是… 我应该自动“检测”“主”线程使用? 如果不是,我应该要求最终开发者在应用程序启动时调用一些(伪) UseThisThreadForEvents()方法,以便我可以从该调用中获取目标线程?
首先,我必须说我对API java.util.concurrent很陌生,所以也许我所做的是完全错误的。 我想做什么? 我有一个基本上运行2个独立处理(称为myFirstProcess , mySecondProcess )的Java应用程序,但是这些处理必须同时运行。 所以,我试图这样做: public void startMyApplication() { ExecutorService executor = Executors.newFixedThreadPool(2); FutureTask<Object> futureOne = new FutureTask<Object>(myFirstProcess); FutureTask<Object> futureTwo = new FutureTask<Object>(mySecondProcess); executor.execute(futureOne); executor.execute(futureTwo); while (!(futureOne.isDone() && futureTwo.isDone())) { try { // I wait until both processes are finished. Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } logger.info("Processing finished"); executor.shutdown(); […]
我有点困惑如何使用pthread声明一个recursion互斥。 我试图做的是一次只能有一个线程能够运行一段代码(包括函数),但是在怀疑之后,我发现互斥锁的使用将不起作用,而我应该使用recursion互斥体(recursive mutexes)。 这是我的代码: pthread_mutex_lock(&mutex); // LOCK item = queue_peek(queue); // get last item in queue item_buff=item; // save item to a buffer queue_removelast(queue); // remove last item from queue pthread_mutex_unlock(&mutex); // UNLOCK 所以我试图做的只是连续读取/从队列中删除。 关于如何声明recursion互斥体,没有任何例子。 或者也许有一些,但他们不为我编译。
有没有一个API来获取Linux中可用的CPU数量? 我的意思是,不使用/ proc / cpuinfo或任何其他系统节点文件… 我发现这个实现使用sched.h: int GetCPUCount() { cpu_set_t cs; CPU_ZERO(&cs); sched_getaffinity(0, sizeof(cs), &cs); int count = 0; for (int i = 0; i < 8; i++) { if (CPU_ISSET(i, &cs)) count++; } return count; } 但是,使用通用库不会有更高的水平吗?