从IO :: Socket :: INET文件句柄读取时,不能假定流上始终存在可用数据.有哪些技术可用于查看流以检查数据是否可用,或者在没有有效行终止的情况下执行读取时不使用数据并立即通过读取?
我对silverlight很新,并且非常惊讶地发现只能进行异步文件下载.好吧,我试图通过设置一个标志并等待它改变来反击这一点.这是我的简单代码
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
WebClient webClient = new WebClient();
webClient.DownloadProgressChanged +=
new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
webClient.OpenReadAsync(new Uri("/trunk/internal/SilverLightInterface.ashx?xxid=XXX", UriKind.Relative));
while (XmlStateStream == null) { }
lblProgress.Content = "Done Loading";
}
void webClient_DownloadProgressChanged(object sender,
DownloadProgressChangedEventArgs e) {
lblProgress.Content = "Downloading " + e.ProgressPercentage + "%";
}
volatile Stream XmlStateStream = null;
void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error != null)
{
lblProgress.Content = "Error: " + e.Error.Message;
return;
}
XmlStateStream = e.Result;
}
Run Code Online (Sandbox Code Playgroud)
这导致Firefox实际冻结(这在我开发时正在做其他事情时非常烦人)(顺便说一下,对firefox的称赞导致我测试它并且firefox冻结了,但是我没有丢失我在恢复后输入的内容)
我不明白为什么while(XmlStateStream==null){} …
我正在使用Thrift编写服务,需要应用一些测试来确保它按预期运行/响应.为实现这一目标,最强大的方法似乎是使用该unittest模块.
我想在"测试"模式下启动服务(从特定的"测试"端口启动,使用"测试"数据等)直接在单元测试的setUp方法中,但是serve()在那一点调用块等待连接.
什么是启动服务的最佳方法,以便可以执行测试并使用该tearDown方法可以干净地降低服务?
我有postgresql(在perlu中)函数getTravelTime(整数,时间戳),它试图选择指定ID和时间戳的数据.如果没有数据或数据是旧的,则从外部服务器下载它们(下载时间约300ms).
多个进程使用此数据库和此功能.当两个进程找不到数据并下载它们并尝试插入travel_time表时,会出现错误(id和timestamp对必须是唯一的).我想到了锁.锁定整个表将阻止所有进程并且只允许一个进程.我只需要锁定id和时间戳.pg_advisory_lock似乎只锁定在"当前会话"中.但我的进程使用自己的会话.
我试着编写自己的锁定/解锁功能.我做得对吗?我使用主动等待,我怎么能省略这个?也许有一种方法可以使用pg_advisory_lock()作为全局锁?
我的代码:
CREATE TABLE travel_time_locks (
id_key integer NOT NULL,
time_key timestamp without time zone NOT NULL,
UNIQUE (id_key, time_key)
);
------------
-- Function: mylock(integer, timestamp)
DROP FUNCTION IF EXISTS mylock(integer, timestamp) CASCADE;
-- Usage: SELECT mylock(1, '2010-03-28T19:45');
-- function tries to do a global lock similar to pg_advisory_lock(key, key)
CREATE OR REPLACE FUNCTION mylock(id_input integer, time_input timestamp)
RETURNS void AS
$BODY$
DECLARE
rows int;
BEGIN
LOOP
BEGIN
-- active waiting here !!!! :(
INSERT INTO travel_time_locks (id_key, …Run Code Online (Sandbox Code Playgroud) 我有一个后台线程,它在给定文件夹中创建图像的灰度缩略图.我看到的问题是后台线程中的Graphics.DrawImage()调用似乎在某种程度上阻止了主UI线程上的Graphics操作.
我可能会误解我在这里看到的东西,并且在今晚晚些时候没有机会进行任何深入的剖析,尽管我不希望能找到太多.
我试图想出尽可能小的repro案例.如果您使用下面的表单替换默认项目中的表单(并在文件夹中有一些图像进行测试),您会注意到动画标签在窗口来回反弹时会断断续续.然而,如果您取消注释顶部的#define以便子控件动画而不是重绘窗口内容,它将非常顺畅地运行.
任何人都可以看到我在这里做错了或帮助我弄清楚如何在更新循环期间避免这种口吃?
//#define USE_LABEL_CONTROL
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Threading;
using System.Windows.Forms;
using Timer = System.Windows.Forms.Timer;
namespace ThreadTest
{
public partial class Form1 : Form
{
private const string ImageFolder = "c:\\pics";
private const string ImageType = "*.jpg";
public Form1()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
this.Size = new Size(300, 300);
string[] ImageFiles = Directory.GetFiles(ImageFolder,
ImageType,
SearchOption.AllDirectories);
// kick off a thread to create grayscale thumbnails of all images …Run Code Online (Sandbox Code Playgroud) 我正在使用UDP编写一些简单的客户端/服务器代码.该程序工作正常,但如果我只启动客户端,recvfrom方法不会阻止.但是,当我删除sendto方法时,recvfrom开始阻塞.怎么知道发生了什么?
这是客户端代码:
int server_length; /* Length of server struct */
char send_buffer[256] = "hi"; /* Data to send */
time_t current_time; /* Time received */
while(true)
{
/* Tranmsit data to get time */
server_length = sizeof(struct sockaddr_in);
if (sendto(m_oSocket, send_buffer, (int)strlen(send_buffer) + 1, 0, (struct sockaddr *)&m_oServer, server_length) == -1)
{
fprintf(stderr, "Error transmitting data.\n");
continue;
}
/* Receive time */
if (recvfrom(m_oSocket, (char *)¤t_time, (int)sizeof(current_time), 0, (struct sockaddr *)&m_oServer, &server_length) < 0)
{
fprintf(stderr, "Error receiving data.\n");
continue; …Run Code Online (Sandbox Code Playgroud) 我正在审查一些代码,并看到了我以前从未见过的东西.我找到了一个用于锁定的对象的所有引用,并得到了以下结果.
我已经替换了所有文件/类/成员名称以保护那些可能需要保护的人.
C:\Sln1\ProjX\ClassX.cs - (17, 26) : public static object PublicStaticLockObj = new object();
C:\Sln1\Proj1\Class1.cs - (193, 20) : lock (ClassX.PublicStaticLockObj)
C:\Sln1\Proj1\Class1.cs - (228, 20) : lock (ClassX.PublicStaticLockObj)
C:\Sln1\Proj1\Class1.cs - (92, 20) : lock (ClassX.PublicStaticLockObj)
C:\Sln1\Proj2\Class2.cs - (115, 20) : lock (ClassX.PublicStaticLockObj)
C:\Sln1\Proj2\Class2.cs - (181, 20) : lock (ClassX.PublicStaticLockObj)
C:\Sln1\Proj2\Class2.cs - (216, 20) : lock (ClassX.PublicStaticLockObj)
C:\Sln1\Proj3\Class3.cs - (160, 20) : lock (ClassX.PublicStaticLockObj)
C:\Sln1\Proj3\Class3.cs - (195, 20) : lock (ClassX.PublicStaticLockObj)
C:\Sln1\Proj3\Class3.cs - (95, 20) : lock (ClassX.PublicStaticLockObj)
C:\Sln1\Proj4\Class4.cs - (133, …Run Code Online (Sandbox Code Playgroud) 我读了这篇关于外部脚本如何阻止UI线程的好文章,但我不清楚阻塞是否实际上是由于<script>标记或src='/myscript.js'src属性的存在.
我的问题是内联javascript(缺少src属性声明),例如:
<script type='text/javascript'> alert('am i blocking too?');</script>
Run Code Online (Sandbox Code Playgroud)
或这个:
<script type='text/javascript'> var php='<?=json_encode($myObj)?>';</script>
Run Code Online (Sandbox Code Playgroud)
还阻止UI线程?
简短说明:
我正在尝试编写一个简单的游戏Node.js,需要在每个回合等待用户输入.我如何avoid callback在一个转弯循环内部地狱(例如凌乱的代码),每个转弯循环迭代需要阻止并等待来自标准输入的输入?
很长的解释:
当有人要求阻止stdin输入时,我在StackOverflow上读到的所有解释似乎都是"那不是Node.js的意思!"
我知道Node.js设计为非阻塞,我也理解为什么.但是我觉得它让我陷入困境和如何解决这个问题的困难之中.我觉得我有三个选择:
使用选项(1),我将反对Node.js非阻塞IO的原则.使用选项(2),我将最终达到堆栈溢出,因为每次调用都会向调用堆栈添加另一个转弯.使用选项(3),我的代码最终会变得混乱.
在Node.js内部有默认函数,标记为**Sync(例如,参见fs库或sleep函数),我想知道为什么没有用于获取用户输入的Sync方法?如果我要写一些类似于fs.readSync我将如何去做并仍然遵循最佳实践的东西?
我如何通过mongoose获得一个大型集合,我得到的每个文件都返回,而不是整个集合的大数组?
目前我只是使用以下查询:
var query = templateData.find({});
query.exec(function (err, docs) {
// docs as array
});
Run Code Online (Sandbox Code Playgroud)
这样,查询功能就像阻塞IO而不是非阻塞.有没有办法让这更无阻塞?
blocking ×10
c# ×3
concurrency ×2
node.js ×2
nonblocking ×2
c++ ×1
client ×1
events ×1
gdi+ ×1
javascript ×1
locking ×1
mongodb ×1
mongoose ×1
perl ×1
postgresql ×1
python ×1
silverlight ×1
sockets ×1
sql ×1
src ×1
stdin ×1
thrift ×1
udp ×1
ui-thread ×1
unit-testing ×1
webclient ×1
winsock ×1